具有自定义后退堆栈层次结构的片段导航



我需要在我的应用程序中的某个时刻创建一个特定的行为。我使用导航抽屉,并替换框架布局中的片段。

假设我在后台堆栈中有一些片段:A -> B -> C。
A 是我的应用程序中的根片段之一,如果在 A 上按下后退按钮,应用程序将退出。

当我在 C 上(A 和 B 在后退堆栈中)时,我想在后退堆栈中使用 D 转到 E。这意味着如果我按下 E 上的后退按钮,我想转到 D(D 是我应用程序中的另一个根片段,如果我按下 D 上的后退按钮,应用程序就会退出)。

现在我清除后堆栈,然后用 D 替换当前片段,然后用 E 替换。
这样做的问题是,在从C到E的过渡过程中,我看到了片段A的一小部分(这很丑陋吧?

为了避免在从 C 到 E 的转换过程中显示 D,您可以添加一个布尔值来跟踪 D 是否是第一次处于活动状态。你在 D 的onActivityCreated中检查它;如果是 D 第一次处于活动状态(当你真的想显示 E 时),不要加载内容,然后翻转布尔值,以便您知道下次 D 处于活动状态时加载内容。

你可以

做的第一部分(C -> E,D在backstack上)。只需将两者添加到同一事务中:

getFragmentManager().beginTransaction()
    .add(R.id.container, FragmentD.newInstance())
    .add(R.id.container, FragmentE.newInstance())
    .addToBackStack(null)
    .commit();

然后您将平稳过渡到 E,而不会看到 D,但 D 将在 E 下方的后堆栈上。

不幸的是,除了

从堆栈中弹出项目之外,没有办法从后台堆栈中删除项目(您无法从堆栈底部删除某些内容)。

最新更新