使用导航组件删除后退堆栈中的片段

时间:2020-06-24 14:06:43

标签: android navigation fragment

我的应用程序正在使用导航组件。在这种情况下,我有四个片段,加载顺序为A-> B-> C-> D。在片段D中,当我完成所有操作后,我想直接回到片段A中,同时删除片段B,C,D。 有人对此情况有解决方案吗?谢谢您的回应!

1 个答案:

答案 0 :(得分:0)

您可以通过检查文档来解决目标情况。

link 1

link 2

enter image description here

对于每个导航操作,将目的地添加到后堆栈中。如果要在此流程中反复导航,则后堆栈将包含每个目标的多组(A,B,C,A,B,C,A等)。为避免这种重复,可以在将您从目标C转到目标A的操作中指定app:popUpTo和app:popUpToInclusive,如以下示例所示:

<fragment
android:id="@+id/c"
android:name="com.example.myapplication.C"
android:label="fragment_c"
tools:layout="@layout/fragment_c">

<action
    android:id="@+id/action_c_to_a"
    app:destination="@id/a"
    app:popUpTo="@+id/a"
    app:popUpToInclusive="true"/>

到达目的地C后,后堆栈包含每个目的地(A,B,C)的一个实例。导航回目的地A时,我们还会弹出UpA,这意味着在导航时我们将从堆栈中删除B和C。使用app:popUpToInclusive =“ true”,我们还将第一个A弹出堆栈,从而有效地将其清除。请注意,如果您不使用app:popUpToInclusive,则后退堆栈将包含目标A的两个实例。