How to pop fragment off backstack
AndroidAndroid FragmentsBack StackAndroid Problem Overview
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.
Android Solutions
Solution 1 - Android
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 - Android
Three ways to pop Fragment off BackStack
Simply add any of these lines:
getActivity().getSupportFragmentManager().popBackStack();
getActivity().getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
getActivity().getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
They're all easy ways to pop fragment off Backstack
Solution 3 - Android
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() {
}
});
}
Solution 4 - Android
Here's example to pop last fragment using BackStackEntry
val manager = supportFragmentManager
try {
// get last entry (you can get another if needed)
val entry = manager.getBackStackEntryAt(manager.backStackEntryCount - 1)
// you can pop it by name
manager.popBackStack(entry.name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
// or pop by id
manager.popBackStack(entry.id, FragmentManager.POP_BACK_STACK_INCLUSIVE)
} catch (ex: Exception) {
ex.printStackTrace()
}