清除片段后栈编程

时间:2012-04-19 09:37:14

标签: android fragment

清除片段堆栈编程的最佳方法是什么?

我只使用一个活动和一组片段实现了屏幕导航。我想有一个方法将用户带到登录屏幕(当注销超时到期时)并清除所有片段历史记录,最好的方法是什么?我在这里找到的答案很少,但我不知道哪个是最好的......提前谢谢!

目前我正在使用这个

public void clearBackStack() {
    FragmentManager fragmentManager = holder.getSupportFragmentManager();

    while (fragmentManager.getBackStackEntryCount() != 0) {
        fragmentManager.popBackStack(null, 0);
    }
}

但有时候我会出现'OutMemoryException

2 个答案:

答案 0 :(得分:11)

这是一个非常古老的问题。无论如何,我尝试了你的代码,看起来你有一个无限循环。

popBackStack(null, 0)搜索带有null标记的片段,该片段永远不会被找到。 while循环将循环直到内存耗尽。 popBackStack的另一个问题是pop不一定立即执行,因此while循环可能会运行一段时间。

如果您想从后台堆栈中删除片段而不管标签或ID,请改用fragmentManager.popBackStackImmediate()

答案 1 :(得分:0)

您可以使用FragmentManager.popBackStack()清除后台堆。

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

这将清空堆栈而不加载到容器中。