gpt4 book ai didi

android - fragment onCreateView() 包。它从何而来?

转载 作者:IT老高 更新时间:2023-10-28 22:10:14 25 4
gpt4 key购买 nike

我正在通过通常的方式开始一个 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.

这对我没有帮助 - 它比阻止我继续前进更让我烦恼。有人可以帮我解决这个烦恼吗?

最佳答案

据我所知,onCreateViewonCreate() 都是从 onSaveInstanceState() 传递的包。

因此,如果您覆盖 onSaveInstanceState() 并将数据放入包中,您应该能够在 onCreateView() 中检索它。这就是为什么文档说当从先前保存的状态重新构建 fragment 时, bundle 将是非空的。

关于android - fragment onCreateView() 包。它从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com