[英]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.