如何从一个片段导航到另一个片段并从堆栈中清除一些其他片段?

How to navigate from a fragment to another clearing some other fragments from the stack?

我有以下导航图

Frag A  -->  Frag B --> Frag C --> -->  Frag D
        \                            /
         ->  Frag E  <---------------
                     \
                      -> Frag F

我当前的堆栈是 [Frag A、Frag B、Frag C 和 Frag D]。知道我当前的目的地是 Frag D,并且我想从 Frag D 导航到 Frag E,并从堆栈中清除 Frag B、Frag C 和 Frag D,该怎么做?


当前堆栈:[片段 A、片段 B、片段 C 和 片段 D]

意图:导航到 Frag E,从堆栈中清除 [Frag B、Frag C 和 Frag D]

结果堆栈:[片段 A 和 片段 E]

如果您通过导航图操作进行导航,这将是一项简单的任务,只需指定您需要将操作弹出到特定片段,如下所示:

 <fragment
        android:id="@+id/D_Frag"
        ...           
            <action
            android:id="@+id/action_DFrag_To_EFrag"
            app:destination="@+id/E_Frag"
            app:popUpTo="@+id/B_Frag"
            app:popUpToInclusive="true"
            />
        ...
    </fragment>

其中 popUpToInclusive 标志表示(您要弹出 B_Frag 包括 B_Frag(真)还是排除它(假))。

此操作将从栈顶弹出所有片段,直到到达 B_Frag,然后到达目的地 E_Frag。

并由

navigating through navigation graph actions

我的意思是你在 D Fragment 中使用像这样的代码行来导航

NavHostFragment.findNavController(DFrag.this)
                    .navigate(R.id.action_DFrag_To_EFrag);

N.B :代码中的三个点 (...) 表示我不在乎那里写的是什么代码,您可以删除三个点并包括随便你