android – Getting a reference to a child Fragment after the parent Fragment has been recreated-ThrowExceptions

Exception or error:

Starting Android 4.2, Android supports nested Fragments. The doc doesn’t give a lot of explanations regarding nested Fragment lifecycles but from experience, it appears their lifecycle is really similar to “regular” Fragments.

It looks like there is one big difference though: child Fragments are not restored when the parent Fragment onCreate method is called. As a consequence, it seems impossible to save/restore a reference to a particular Fragment:

  • Using getChildFragmentManager.findFragmentByTag(String) always returns null in parent Fragment onCreate(Bundle) because mActive is null.
  • Using putFragment/getFragment results in a NullPointerException because getFragment looks for the size of a null mActive ArrayList.

So, my question is quite simple. Is there a correct way to retrieve a reference to a child Fragment in the parent Fragment onCreate method?

How to solve:

I don’t think you can in onCreate as the view isn’t constructed at that time. You can in onViewCreated() though. The logic I used is:

  • Check if there is saved state in onViewCreated(), if there is, try to get the child fragment
  • Then check if the child fragment is null, if it is, add it using the child fragment manager.

By “checking” I mean looking up the fragment by id. I guess by tag should work too.

AFAIK you can’t get a child fragment before the view hierarchy is restored or created, but you could do the same at later time, for example in onActivityCreated()


What about setRetainInstanceState(true) on your fragment?
Could it solve your problem? It solved some problems when I have ChildFragments in a Fragment. I only have to keep a reference to the childfragment in the fragment.

But I allways did that in onCreateView(). Not sure if it will work in onCreate()

Or do you mean something completely different?


are u using FragmentPagerAdapter?
if not try FragmentPagerAdapter instead of FragmentStatePagerAdapter
I realised that have some bug when using FragmentStatePagerAdapter when i have 4 level nest.
Sorry my english is poor.

public void onCreate(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
     mFragment1 = getFragmentManager().getFragment(savedInstanceState, STATE_Fragment1);
     mFragment2 = getFragmentManager().getFragment(savedInstanceState, STATE_Fragment2);
     mFragment3 = getFragmentManager().getFragment(savedInstanceState, STATE_Fragment3);
    } else {
     mFragment1 = SomeFragment.newInstance("param1");
     mFragment2 = SomeFragment.newInstance("param2");
     mFragment3 = SomeFragment.newInstance("param3");
    mMyPagerAdapter = new MyPagerAdapter(getChildFragmentManager(), mFragment1, mFragment2, mFragment3);

public void onSaveInstanceState(Bundle outState) {
    if (mFragment1 != null) {
        getFragmentManager().putFragment(outState, STATE_Fragment1,

    if (mFragment2 != null) {
        getFragmentManager().putFragment(outState, STATE_Fragment2,

    if (mFragment3 != null) {
        getFragmentManager().putFragment(outState, STATE_Fragment3,


Leave a Reply

Your email address will not be published. Required fields are marked *