嗨,如何清除片段回堆栈正在使用以下逻辑它不起作用...
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
帮我..
嗨,如何清除片段回堆栈正在使用以下逻辑它不起作用...
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);
}