Android 使用导航组件删除backstack中的片段

Android 使用导航组件删除backstack中的片段,android,navigation,fragment,Android,Navigation,Fragment,我的应用程序正在使用导航组件。在本例中,我有四个片段加载顺序是A->B->C->D。在片段D中,当我完成所有操作后,我想直接返回片段A,同时删除片段B、C、D。 有人能解决这个问题吗?谢谢你的回复 您可以通过检查文档中的目标情况来解决它们 每个导航操作都会将目标添加到后堆栈中。如果要在该流中重复导航,那么后堆栈将包含每个目的地A、B、C、A、B、C、A等的多个集合。为了避免这种重复,可以在将您从目标C带到目标A的操作中指定app:popUpTo和app:popuptinclusive,如下例所示

我的应用程序正在使用导航组件。在本例中,我有四个片段加载顺序是A->B->C->D。在片段D中,当我完成所有操作后,我想直接返回片段A,同时删除片段B、C、D。
有人能解决这个问题吗?谢谢你的回复

您可以通过检查文档中的目标情况来解决它们

每个导航操作都会将目标添加到后堆栈中。如果要在该流中重复导航,那么后堆栈将包含每个目的地A、B、C、A、B、C、A等的多个集合。为了避免这种重复,可以在将您从目标C带到目标A的操作中指定app:popUpTo和app:popuptinclusive,如下例所示:

到达目的地C后,后堆栈包含每个目的地A、B、C的一个实例。当导航回目的地A时,我们也会弹出到A,这意味着在导航时从堆栈中删除B和C。使用app:popuptinclusive=true,我们还将第一个A从堆栈中弹出,有效地清除它。请注意,如果您不使用app:popuptinclusive,那么您的后堆栈将包含目标A的两个实例


谢谢你的帮助。我没有添加app:popuptinclusive=true,所以它有一个问题:DThanks。需要两个app:popUpTo=@+id/a app:popuptinclusive=true您不需要添加app:destination=@id/a和app:popuptinclusive=true。在这种情况下,只需添加app:popUpTo=@+id/a就足够了,并且不会有两个a实例。
<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"/>