【发布时间】:2013-06-14 11:01:28
【问题描述】:
您好,如何清除片段回栈我使用下面的逻辑它不起作用...
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);
【讨论】:
onActivityCreated()。
上面的答案几乎是正确的,但是你需要在片段返回列表周围设置一个守卫,因为它可以是空的:
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, 然后所有匹配的条目将被消耗,直到一个不匹配的条目 找到匹配或到达堆栈底部。否则,所有 最多但不包括该条目的条目将被删除。
如果你不想为你的 backstack 使用名字,你可以使用第一个参数
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
【讨论】:
mFragmentManager.beginTransaction().add(mFragment, "myfancyname");
这有点晚了,但我自己也遇到了这个问题。你可以这样做:
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);
}
【讨论】: