Search code examples
androidandroid-fragmentsandroid-nested-fragment

Nested Fragments and The Back Stack


Does the Back Stack support interaction with nested Fragments in Android?

If it does, what am I doing wrong? In my implementation, the back button is completely ignoring the fact that I added this transaction to the back stack. I'm hoping it is not because of an issue with nested fragments and just me doing something incorrectly.

The following code is inside of one of my fragments and is used to swap a new fragment with whatever nested fragment is currently showing:

     MyFragment fragment = new MyFragment();
     FragmentTransaction ft = getChildFragmentManager().beginTransaction();
     ft.setCustomAnimations(R.animator.slide_in_from_right, R.animator.slide_out_left, R.animator.slide_in_from_left, R.animator.slide_out_right);
     ft.addToBackStack(null);
     ft.replace(R.id.myFragmentHolder, fragment);
     ft.commit();

Solution

  • I have the same problem, I would like to nest fragments, and to keep a back stack for each nested fragment.

    But... it seems that this case is not handled by the v4 support library. In the FragmentActivity code in the library, I can find :

    public void onBackPressed() {
        if (!mFragments.popBackStackImmediate()) {
            finish();
        }
    }
    

    The mFragments represents the FragmentManager of the activity, but it does not seem this manager "propagates" the pop to children managers. A workaround would be to manually call the popBackStackImmediate() on the child manager, like this in the activity inherited from FragmentActivity :

    private Fragment myFragmentContainer;
    
        @Override
        public void onBackPressed() {
                if (!myFragmentContainer.getChildFragmentManager().popBackStackImmediate()) {
                    finish(); //or call the popBackStack on the container if necessary
                }
        }
    

    There might be a better way, and a more automated way, but for my needs it is allright.