Proper use of sub sub fragments with (Child)FragmentManager

Viewed 26803

How do I properly use Fragments in Fragments?

My (simplified) use case is following, I have an activity with a layout fragment and this fragment theirself contains a sub fragment... all fragments are added manually to their parents...

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

Now in my activity's onCreate I do following:

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);
}

And in my fragments onCreate I get/create my 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

After screen rotation, my SubFragment is added twice... If I use the activity's FragmentManager then it works... But why does it not work with the ChildFragmentManager? Of course, the Fragment is a new fragment, but the activity is a new one as well, so why does it work with the activity's FragmentManager but not with the parent fragment's one?

In a fragment, I should use the fragments ChildFragmentManager, shouldn't I?

1 Answers
Related