androidandroid-fragmentsback-stack

How to pop fragment off backstack


I have an activity A, which calls fragment Bf, which calls fragment Cf. I want Bf to be placed in the backstack when Cf is called so that users can navigate back to it. However, if a specific button is pressed in Cf, I would like Bf to be removed from the backstack. Is this possible?

I see that there is a popBackStack() function. However, I am a little confused on how this would work. Is it safe to use this function? Is there any possibility that an activity from a different application would be inserted after Bf on the backstack?

Also, is there any way to alter the savedInstanceState of the fragment on the backstack?

I just can't figure out how to do a robust test on the backstack using the emulator.


Solution

  • You can pop the fragment by name. While adding fragments to the back stack, just give them a name.

    fragmentTransaction.addToBackStack("fragB");
    fragmentTransaction.addToBackStack("fragC");
    

    Then in Fragment_C, pop the back stack using the name ie.. fragB and include POP_BACK_STACK_INCLUSIVE

    someButtonInC.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View v) {
    
            FragmentManager fm = getActivity()
                    .getSupportFragmentManager();
            fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    });