【发布时间】:2014-01-07 17:25:27
【问题描述】:
如何在 Fragments 中正确使用 Fragments?
我的(简化的)用例如下,我有一个带有布局片段的活动,这个片段本身包含一个子片段......所有片段都手动添加到它们的父片段......
----------------------------------------------------------
- Activity -
- -
- -
- --------------------------------------- -
- - Fragment - -
- - - -
- - ----------------- - -
- - - SubFragment - - -
- - - - - -
- - - - - -
- - ----------------- - -
- --------------------------------------- -
- -
----------------------------------------------------------
现在在我的活动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);
}
在我的片段onCreate 我得到/创建我的子片段:
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 添加了两次...如果我使用活动的FragmentManager 那么它可以工作...但是为什么它不适用于ChildFragmentManager?当然,Fragment 是一个新的 Fragment,但 Activity 也是一个新的,为什么它与 Activity 的FragmentManager 一起工作,而与父 Fragment 的不工作?
在片段中,我应该使用片段ChildFragmentManager,不是吗?
【问题讨论】:
-
不是同一个问题,但是来这里的其他人,请看相关Communication between nested fragments in Android。
标签: android fragment fragmentmanager