你好,我该如何清除碎片返回栈?我使用了以下逻辑但并没有生效...
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
中使用的字符串匹配。例如:
其中"myfancyname"
应该与您在addToBackStack
中使用的字符串匹配。例如:
Fragment fancyFragment = new FancyFragment();
fragmentTransaction.replace(R.id.content_container, fancyFragment, "myfragmentag");
fragmentTransaction.addToBackStack("myfancyname");
回退栈的名称和片段的标记名称可以相同,但在这方面没有任何限制。
来自文档:
如果设置了回退栈条目的名称或 ID,则会消耗所有匹配的条目,直到找到一个不匹配的条目或达到堆栈底部。否则,将删除该条目之前的所有条目,但不包括该条目。
如果您不想为回退栈使用名称,可以传递第一个参数。
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
mFragmentManager.beginTransaction().add(mFragment, "myfancyname");
- nt-complete可能有点晚了,但我刚刚遇到了这个问题。你可以这样做:
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);
}
onActivityCreated()
方法。 - VasileM