【发布时间】:2016-01-05 20:11:45
【问题描述】:
当我打开一个特定的 Fragment 时,我正试图清除 backstack。 假设我有 Fragment Foo 和 Fragment Bar,我可以在 MainActivity 中打开它们。另外,我可以从 Foo 或 Bar 打开其他片段。 这是简单的方案:
主要活动 - Foo-> Foo1-> Foo2-> Foo3
主要活动 - Bar-> Bar1-> Bar2-> Bar3
另外,我有一个菜单,所以我可以从任何地方访问 Fragments Foo 和 Bar:例如,它可以从 Foo2 或 Bar3 或任何其他 Fragment 访问。 问题是我想在打开此片段后输入 Foo 或 Bar 时清除后台堆栈。
主要活动 - Foo-> Foo1-> Foo2-> Foo3 -> Bar
(清除后台堆栈,这样后退按钮会关闭应用程序)。
我正在尝试通过这样做来关闭所有片段:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
}
操作是这样的: 主要活动 - Foo-> Foo1-> Foo2-> Foo3 -> Bar。 但是当出现 Bar Fragment 时,我只看到 Foo Fragment 。 不清除 backstack 似乎一切正常,除了返回按钮返回前一个 Foo3 片段。 那么,我做错了什么?
另外,我已经通过以下方式完成了清理工作:
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
但它也不起作用。
【问题讨论】:
-
能否请您参考stackoverflow.com/questions/31737013/…一个。我给出了同样的答案。
-
你的方式会产生同样的结果。