- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在通过通常的方式开始一个 Activity :
Intent startIntent = new Intent(this, DualPaneActivity.class);
startIntent.putExtras(((SearchPageFragment) currentFragment).getPageState());
startActivity(startIntent);
当这个 Activity 加载时,它会像这样在框架中放置一个 fragment :
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment currentFragment = fragment;
currentFragment.setArguments(getIntent().getExtras());
transaction.replace(R.id.singlePane, currentFragment);
transaction.commit();
看起来很简单,对吧?
但是,您可以在 onCreateView() 方法内部访问三个单独的包(四个,如果包含在 Fragment 的 onCreate(Bundle savedInstanceState)
中的包):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Fill state information
Bundle bundle;
if(savedInstanceState != null) bundle = savedInstanceState; // 1
else if(getArguments() != null) bundle = getArguments(); // 2
else bundle = getActivity().getIntent().getExtras(); // 3
setPageState(bundle);
}
在上面的例子中,我通过反复试验得出我想要的包是第二个,即从 getArguments()
中检索到的那个。
据我了解,来自 getActivity().getIntent().getExtras();
的第三个实际上是从用于开始包含 Activity 的 Intent 调用 Bundle。我还从实验中知道 savedInstanceState
似乎总是为空。但它是从哪里来的?为什么它是空的?
documentation是这样说的:
savedInstanceState If non-null, this fragment is being re-constructed from a previous saved state as given here.
这对我没有帮助 - 它比阻止我继续前进更让我烦恼。有人可以帮我解决这个烦恼吗?
最佳答案
据我所知,onCreateView
和 onCreate()
都是从 onSaveInstanceState()
传递的包。
因此,如果您覆盖 onSaveInstanceState()
并将数据放入包中,您应该能够在 onCreateView()
中检索它。这就是为什么文档说当从先前保存的状态重新构建 fragment 时, bundle 将是非空的。
关于android - fragment onCreateView() 包。它从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041621/
我是一名优秀的程序员,十分优秀!