清除片段回退栈编程

3
什么是清除程序化片段后退堆栈的最佳方法?
我仅使用一个activity和一组fragment实现屏幕导航。我希望有一种方法可以将用户带到登录屏幕(当注销超时后),并清除所有片段历史记录,这样做的最佳方式是什么?我在这里找到了几个答案,但我不知道哪个是最好的...提前致谢!
目前我正在使用这个方法
public void clearBackStack() {
    FragmentManager fragmentManager = holder.getSupportFragmentManager();

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

有时我会遇到OutOfMemoryException错误


3
你看过这个了吗? - Lalit Poptani
我尝试过类似的方法,或者我可能是错的... 我更新了我的问题。 - Orest
不,所有资源都非常小并且在res中预定义。 - Orest
我已经尝试了你的解决方案,目前没有出现任何异常。但是我无法验证我的代码和你的代码之间的区别。无论如何,还是谢谢。 - Orest
2个回答

13

这个问题很早以前就有了。无论如何,我尝试了您的代码,看起来您进入了一个无限循环。

popBackStack(null, 0) 搜索具有空标记的片段,但永远找不到。while 循环将在内存耗尽之前循环。关于 popBackStack 的另一个问题是,弹出操作不一定会立即执行,因此 while 循环可能会运行一段时间。

如果要删除后退堆栈中的片段,而不考虑标记或 ID,请改用 fragmentManager.popBackStackImmediate()


0
你可以使用 FragmentManager.popBackStack() 来清除后退栈。
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接