5

如何BackStackEntries清除FragmentManager?这是我用来更改片段对象的代码:

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

在特定情况下,我需要删除完整的 backstack 条目。我在片段管理器中没有找到任何特定的方法。你有什么想法?

4

5 回答 5

6

我一直在研究一种我认为可以满足您要求的方法,但是我能够从文档中弄清楚的唯一一件事是该方法是否只是清空 BackStack 或者是否对查看容器。基本上,它找到位于堆栈顶部的条目并删除所有内容,包括该条目。如果其他人认为有负面影响,请告诉我,因为我会很好奇:

public static void clearBackStack(FragmentManager manager){
    int rootFragment = manager.getBackStackEntryAt(0).getId();
    manager.popBackStack(rootFragment, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
于 2011-08-10T03:04:23.093 回答
2

这对我来说很好:

clearFragments(FragmentManager fm) {
    while (fm.popBackStackImmediate());
}
于 2012-01-26T08:23:07.880 回答
1

你是对的,就我可以阅读文档而言,没有办法清除堆栈。

这是一个大问题。尝试将问题上传到 Android 的问题跟踪器,我希望有人能看到它。我还在等的。

这是一个相当不错的技巧,但您可以尝试完成Activity并重新开始。它可能会清除堆栈。

于 2011-03-17T15:01:08.113 回答
1

如果您想清除所有后退堆栈,可能是因为您将要做与先前上下文无关的事情。在这种情况下,您应该启动一个新的活动。

正如我开始理解的那样,对于片段,活动将作为片段的容器工作。您应该尝试保持 Fragment 之间的独立性,同时根据它们的上下文在活动中组织它们。

在您的情况下,当特定情况发生时,您可以启动一个新的 Activity 并将所需的片段放在这个新的 Activity 上,而不是放在旧的 Activity 中。这个新的 Activity 将处理新的 Fragment 堆栈。这样,您的代码也会更加封装,不是吗?

看看这个解释性回复:CommonsWare 回复

希望能帮助到你!

于 2011-05-17T16:47:30.577 回答
0

您是否尝试在片段管理器中调用 popBackStack() ?

于 2011-03-15T06:56:35.797 回答