How to pop fragment off backstack

94,346

Solution 1

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

Solution 2

Three ways to pop Fragment off BackStack

Simply add any of these lines:

1)

getActivity().getSupportFragmentManager().popBackStack();

2)

getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

3)

getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

They're all easy ways to pop fragment off Backstack

Solution 3

first replacing fragment container_view that time we add name as like "Later Transaction"

   getSupportFragmentManager().beginTransaction().replace(R.id.container_view, 
    profileFragment, "Profile").addToBackStack("Later Transaction").commit();

then on back press button pop the back stack using the Later Transaction name

     int count = getSupportFragmentManager().getBackStackEntryCount();
    if(count > 1) {
     getSupportFragmentManager().popBackStack("Later Transaction", 
     FragmentManager.POP_BACK_STACK_INCLUSIVE);
    } else {
        DialogUtils.show(HomeActivity.this, 
        getString(R.string.exit_app_message), getString(R.string.alert), 
       "Yes","No", new DialogUtils.ActionListner() {
            @Override
            public void onPositiveAction() {
                finish();
            }
            @Override
            public void onNegativeAction() {
            }
        });
    }
Share:
94,346

Related videos on Youtube

user2085335
Author by

user2085335

Updated on January 17, 2022

Comments

  • user2085335
    user2085335 over 2 years

    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.

    • stack_ved
      stack_ved almost 10 years
      Avoid using back stacks! it doesn't really help with the overall efficiency! use plain replace() or even better remove/add every time you want to navigate! Check my post on stackoverflow.com/questions/5802141/…
    • Sufian
      Sufian over 7 years
      @stack_ved not a good idea. BackStacks are a great thing. Btw I can't see your post. I guess it was downvoted. :P
  • Kailas
    Kailas over 10 years
    It will work even if we pass no parameters too in the fm.popBackStack Method. fm.popBackStack();
  • Akshay
    Akshay over 10 years
    what if I want to make it on back button press?
  • ocross
    ocross almost 10 years
    @Akki if you are using add to backstack it will already pop the last fragment added when you hit the back navigation item. So no extra steps are necessary to perform a normal navigation back. Only time you need to override on back button pressed is when you want to do something other than a normal one step back navigation.
  • Hamzeh Soboh
    Hamzeh Soboh about 9 years
    What if that fragment was the first fragment, then addToBackStack with replace will cause a problem. Any way to do this without calling addToBackStack?
  • Vahid Ghadiri
    Vahid Ghadiri almost 9 years
    According to doc "all states up to that state will be popped", not just a specific fragment.
  • Sreekanth Karumanaghat
    Sreekanth Karumanaghat almost 7 years
    @VahidGhadiri That is how the Stack Data structure is designed.
  • Abhijit Rajmane
    Abhijit Rajmane about 4 years
    Great solution for manage back stack entry count of fragments
  • KSDev
    KSDev about 4 years
    Thank you so muchhhhh! After overiding onbackpressed, this really helped me to go back. I searched for about an hour