Android 具有自定义backbackback层次结构的片段导航

Android 具有自定义backbackback层次结构的片段导航,android,android-fragments,fragment-backstack,Android,Android Fragments,Fragment Backstack,我需要在我的应用程序中的某个点创建特定的行为。我使用一个导航抽屉,替换框架布局中的片段 假设我在后台有一些碎片:A->B->C. A是我的应用程序中的根片段之一,如果按下A上的后退按钮,应用程序将退出 当我在C上时(A和B在后面),我想去E,D在后面。这意味着如果我按下E上的后退按钮,我想转到D(D是我应用程序中的另一个根片段,如果我按下D上的后退按钮,应用程序退出) 现在我清除后堆栈,然后用D替换当前片段,然后用E替换当前片段。 问题是,在从C到E的转换过程中,我会在一小段时间内看到片段A(这

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

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

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

现在我清除后堆栈,然后用D替换当前片段,然后用E替换当前片段。

问题是,在从C到E的转换过程中,我会在一小段时间内看到片段A(这很难看吧?

为了避免在从C到E的转换过程中显示D,您可以添加一个布尔值来跟踪D是否是第一次激活。您将其签入D的
活动创建的
;如果这是D第一次处于活动状态(当您确实想显示E时),请不要加载内容,然后翻转布尔值,以便您知道下次D处于活动状态时加载内容。

您可以执行的第一部分(C->E,D在后台)。只需将两者添加到同一事务:

getFragmentManager().beginTransaction()
    .add(R.id.container, FragmentD.newInstance())
    .add(R.id.container, FragmentE.newInstance())
    .addToBackStack(null)
    .commit();
然后你将平稳地过渡到E,没有看到D,但D将在E下面的背面


不幸的是,除了从堆栈中弹出项目外,没有其他方法从backbackback中移除项目(您无法从堆栈底部移除某些项目)。

我没有看到D,我看到A。这是清除backbackback的结果(B和C被移除)。我正在寻找一种方法来妥善处理这件事。在iOS上,我会修改NSNavigationController.viewControllers属性。我在审查我的问题时没有接受答案,虽然我不是对你的答案投反对票的人,但我认为这不起作用。您正在同一事务中添加2个片段。返回将同时移除2个碎片。正当