How to clear Fragment backstack in android

2019-01-22 01:41发布

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..

6条回答
闹够了就滚
2楼-- · 2019-01-22 01:59

The best option I ever seen is here.

            int count = getSupportFragmentManager().getBackStackEntryCount();
            if (count > 0) {
                getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
            }
查看更多
迷人小祖宗
3楼-- · 2019-01-22 02:01

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);
    }
}
查看更多
Summer. ? 凉城
4楼-- · 2019-01-22 02:03

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);
查看更多
beautiful°
5楼-- · 2019-01-22 02:05

Try this

mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
查看更多
做自己的国王
6楼-- · 2019-01-22 02:06

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.

查看更多
Animai°情兽
7楼-- · 2019-01-22 02:10
while (getSupportFragmentManager().getBackStackEntryCount() > 0){
    getSupportFragmentManager().popBackStackImmediate();
}
查看更多
登录 后发表回答