How to clear Fragment backstack in android

AndroidAndroid Fragments

Android Problem Overview


hi how to clear fragment back stack am using below logic it's not working...

for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {    		
	 mFragmentManager.popBackStack();
}

help me..

Android Solutions


Solution 1 - Android

Try this

mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

Solution 2 - Android

Answer above is almost correct, but you need a guard around the fragment back list as it can be empty:

private void clearBackStack() {
    FragmentManager manager = getSupportFragmentManager();
    if (manager.getBackStackEntryCount() > 0) {
        FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
         manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}

Solution 3 - Android

while (getSupportFragmentManager().getBackStackEntryCount() > 0){
    getSupportFragmentManager().popBackStackImmediate();
}

Solution 4 - Android

one way is to tag the backstack and when you want to clear it

mFragmentManager.popBackStack("myfancyname", FragmentManager.POP_BACK_STACK_INCLUSIVE);

where the "myfancyname" should match the string you used with addToBackStack. E.g.

Fragment fancyFragment = new FancyFragment();     
fragmentTransaction.replace(R.id.content_container, fancyFragment, "myfragmentag");
fragmentTransaction.addToBackStack("myfancyname");

the backstack's name and the fragment's tag name can be the same but there are no constrains on this regard

From the documentation

> If set, and the name or ID of a back stack entry has been supplied, > then all matching entries will be consumed until one that doesn't > match is found or the bottom of the stack is reached. Otherwise, all > entries up to but not including that entry will be removed.

if you don't want to use a name for your backstack you can pass use a first parameter

 mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

Solution 5 - Android

This is a bit late but I just had this problem myself. You can do:

FragmentManager manager = getFragmentManager();
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);

Pretty self explanatory; you just get the first entry, get its id, and then pop everything up to and including the entry with that id.

Solution 6 - Android

The best option I ever seen is here.

            int count = getSupportFragmentManager().getBackStackEntryCount();
            if (count > 0) {
                getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvenuView Question on Stackoverflow
Solution 1 - AndroiddraculaView Answer on Stackoverflow
Solution 2 - AndroidjohnarleyburnsView Answer on Stackoverflow
Solution 3 - AndroidJeanKView Answer on Stackoverflow
Solution 4 - AndroidBlackbeltView Answer on Stackoverflow
Solution 5 - AndroidRichard FungView Answer on Stackoverflow
Solution 6 - Androidsajid45View Answer on Stackoverflow