【发布时间】:2020-06-24 14:06:43
【问题描述】:
我的应用正在使用导航组件。在这种情况下,我有四个片段加载顺序是 A->B->C->D。在片段 D 中,当我完成所有操作后,我想直接返回片段 A 并同时删除片段 B、C、D。 有人有这个案例的解决方案吗?感谢您的回复!
【问题讨论】:
标签: android navigation fragment
我的应用正在使用导航组件。在这种情况下,我有四个片段加载顺序是 A->B->C->D。在片段 D 中,当我完成所有操作后,我想直接返回片段 A 并同时删除片段 B、C、D。 有人有这个案例的解决方案吗?感谢您的回复!
【问题讨论】:
标签: android navigation fragment
您可以通过检查文档中的目标情况来解决它们。
每个导航操作都会将一个目的地添加到后退堆栈中。如果您要在此流程中反复导航,则您的后台堆栈将包含每个目的地的多组(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 时,我们还弹出了 A,这意味着我们在导航时从堆栈中删除 B 和 C。使用 app:popUpToInclusive="true",我们还将第一个 A 从堆栈中弹出,有效地清除它。请注意,如果您不使用 app:popUpToInclusive,您的后台堆栈将包含目标 A 的两个实例。
【讨论】: