如何在片段中正确使用片段?
我的(简化的)用例如下,我有一个带有布局片段的活动,这个片段本身包含一个子片段……所有的片段都会被手动添加到它们的父级...
----------------------------------------------------------
- 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
中,我得到/创建了我的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();
}
Problem
屏幕旋转后,我的SubFragment被添加了两次...如果我使用活动的FragmentManager
,那么它就可以工作...但是为什么它不能与ChildFragmentManager
一起工作呢?当然,片段是一个新片段,但是活动也是一个新片段,那么为什么它可以使用活动的FragmentManager
,而不能使用父片段的呢?
在片段中,我应该使用片段ChildFragmentManager
,不是吗?
发布于 2014-03-11 22:43:05
您应该像将Fragment
添加到Activity
一样,将SubFragment
添加到Fragment
。我的意思是将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
添加子片段
https://stackoverflow.com/questions/20676690
复制相似问题