繁体   English   中英

如何在android中清除Fragment backstack

[英]How to clear Fragment backstack in android

嗨如何使用下面的逻辑清除片段后栈我不能正常工作...

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

帮我..

试试这个

mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

上面的答案几乎是正确的,但你需要在片段后面列表中保护,因为它可以是空的:

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);
    }
}
while (getSupportFragmentManager().getBackStackEntryCount() > 0){
    getSupportFragmentManager().popBackStackImmediate();
}

一种方法是标记 backstack以及何时清除它

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

其中"myfancyname"应与您使用addToBackStack的字符串匹配。 例如

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

backstack的名称和片段的标签名称可以相同,但在这方面没有约束

从文档中

如果已设置,并且已提供后备栈条目的名称或ID,则将使用所有匹配的条目,直到找到不匹配的条目或达到堆栈的底部。 否则,将删除所有条目,但不包括该条目。

如果您不想为后台堆栈使用名称,则可以使用第一个参数

 mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

这有点晚了但我自己也遇到了这个问题。 你可以做:

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

非常自我解释; 您只需获取第一个条目,获取其ID,然后弹出所有内容,包括具有该ID的条目。

我见过的最好的选择就在这里。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM