管理FragmentManager BackStackEntries

问题描述 投票:5回答:5

如何清除BackStackEntriesFragmentManager?这是我用它来改变我的片段对象的代码:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.replace(R.id.mainFragement, homeFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

在特定的情况下,我需要删除完整的堆栈中的条目。我没有发现碎片经理什么特别的方法。你有什么想法?

android android-fragments android-3.0-honeycomb
5个回答
6
投票

我一直在努力,我认为做你问做什么的方法,但我已经能够从文档找出的唯一事情是这样的方法是否不只是清空返回堆栈或是否有任何暗示的View容器。基本上,它找到位于堆栈顶部的条目,并删除所有内容,包括该条目。如果其他人认为有负面影响,让我知道,因为我很好奇:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

2
投票

这对我来说工作得很好:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}

1
投票

你是对的,没有清除栈,据我可以通过文档阅读的方式。

这是一个大问题。尝试上传问题Android的issue tracker,我希望有人看着它。我仍然在等待mine

这是一个相当技巧,但你可以尝试完成你的Activity,并再次启动。这可能清除栈。


1
投票

如果要清除所有回栈可能是因为你要做的东西是不是与以前的环境相关的。在这种情况下,你应该启动一个新的活动。

正如我开始明白,与片段,活动将作为片段的容器。你应该尽量保持片段之间的独立性,而根据它们的上下文活动组织他们。

在你的情况下,在特定的情况发生,你可以启动一个新的活动,并把所需的片段上这一新的活动,而不是将其放置在老活动。这一新的活动将处理片段的新的堆栈。这样,你也会有你的代码多一点封装的,不是吗?

看看这个说明回复:CommonsWare reply

希望能帮助到你!


0
投票

你有没有尝试popBackStack()的片段经理电话?

© www.soinside.com 2019 - 2024. All rights reserved.