使用自定义Backstack层次结构的片段导航

时间:2014-11-26 21:46:52

标签: android android-fragments fragment-backstack

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

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

当我在C(背靠背中有A和B)时,我想在背包中带着D去E。这意味着如果我按下E上的后退按钮,我想转到D(D是我应用中的另一个根片段,如果我按下应用程序退出的D上的后退按钮)。

现在我清理后面的堆栈,然后用D替换当前片段,然后用E.替换 这个问题是我在从C到E的过渡过程中看到片段A很少一段时间。(这很丑陋吧?)

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

你可以做的第一部分(C - > E,背面堆叠有D)。只需将两者都添加到同一事务中:

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

然后你会顺利过渡到E而不会看到D,但是D将会出现在E的背后。

不幸的是,除了从堆栈弹出它们之外,没有办法从backstack中删除项目(你不能从堆栈底部删除一些东西)。