How to pop fragment off backstack
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() {
}
});
}
Related videos on Youtube
user2085335
Updated on January 17, 2022Comments
-
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 almost 10 yearsAvoid 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 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 over 10 yearsIt will work even if we pass no parameters too in the fm.popBackStack Method. fm.popBackStack();
-
Akshay over 10 yearswhat if I want to make it on back button press?
-
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 about 9 yearsWhat if that fragment was the first fragment, then
addToBackStack
withreplace
will cause a problem. Any way to do this without callingaddToBackStack
? -
Vahid Ghadiri almost 9 yearsAccording to doc "all states up to that state will be popped", not just a specific fragment.
-
Sreekanth Karumanaghat almost 7 years@VahidGhadiri That is how the Stack Data structure is designed.
-
Abhijit Rajmane about 4 yearsGreat solution for manage back stack entry count of fragments
-
KSDev about 4 yearsThank you so muchhhhh! After overiding onbackpressed, this really helped me to go back. I searched for about an hour