如何正确使用碎片中的碎片?
我的(简化)用例如下,我有一个带有布局片段的活动,这个片段自己包含一个子片段...所有片段都手动添加到他们的父母......
---------------------------------------------------------- - 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(); }
问题
屏幕旋转后,我的SubFragment被添加两次......如果我使用活动,FragmentManager
那么它可以工作......但为什么它不能用于ChildFragmentManager
?当然,片段是一个新的片段,但是活动也是一个新片段,那么为什么它与活动有关FragmentManager
,而与父片段无关?
在片段中,我应该使用片段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(); } } }
或者您可以Fragment
在onCreate
方法中 添加子片段