gpt4 book ai didi

android - 使用 (Child)FragmentManager 正确使用子子 fragment

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

如何在 Fragments 中正确使用 Fragments?

我的(简化的)用例如下,我有一个带有布局 fragment 的 Activity ,这个 fragment 本身包含一个子 fragment ......所有 fragment 都手动添加到它们的父 fragment ......

----------------------------------------------------------
- Activity -
- -
- -
- --------------------------------------- -
- - Fragment - -
- - - -
- - ----------------- - -
- - - SubFragment - - -
- - - - - -
- - - - - -
- - ----------------- - -
- --------------------------------------- -
- -
----------------------------------------------------------

现在在我的 Activity 的 onCreate 中,我执行以下操作:

if (savedInstanceState == null)
{
// I create the fragment
mMainFragment = new MainFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_main, mMainFragment);
transaction.commit();
}
else
{
// I retrieve the fragment
mMainFragment = (BaseFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_main);
}

在我的 fragment onCreate 我得到/创建我的 SubFragment:

mSubFragment = getChildFragmentManager().findFragmentByTag(SubFragment.class.getName());
if (mSubFragment == null)
{
mSubFragment = new SubFragment();
getChildFragmentManager().beginTransaction().add(R.id.fragment_sub, mSubFragment, SubFragment.class.getName()).commit();
}

问题

屏幕旋转后,我的 SubFragment 添加了两次...如果我使用 Activity 的 FragmentManager 那么它可以工作...但是为什么它不适用于 ChildFragmentManager ?当然,Fragment 是一个新的 Fragment,但 Activity 也是一个新的 Fragment,为什么它可以与 Activity 的 FragmentManager 一起工作,而不能与父 Fragment 的呢?

在 fragment 中,我应该使用 fragment ChildFragmentManager,不是吗?

最佳答案

您应该将 SubFragment 添加到 Fragment,就像将 Fragment 添加到 Activity 一样。我的意思是将 Fragment 添加到 Activity 应该如下所示:

 @Override
public void onCreate(Bundle savedInstanceState) {
....
if (savedInstanceState == null){
//add fragment
mMainFragment = new MainFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_main, mMainFragment);
transaction.commit();
}
}

SubFragment 添加到 MainFragment 应如下所示:

    public class MainFragment extends Fragment{

@Override
public View onCreateView(LayoutInflater i, ViewGroup c, Bundle savedInstanceState) {
...
if (savedInstanceState == null){
mSubFragment = new SubFragment();

//add child fragment
getChildFragmentManager()
.beginTransaction()
.add(R.id.fragment_sub, mSubFragment, "tag")
.commit();
}
}
}

或者您可以在 onCreate 方法中将子 fragment 添加到 Fragment

关于android - 使用 (Child)FragmentManager 正确使用子子 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20676690/

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