【问题标题】:How to navigate from a fragment to another clearing some other fragments from the stack?如何从一个片段导航到另一个从堆栈中清除一些其他片段?
【发布时间】:2021-11-12 10:09:56
【问题描述】:
我有以下导航图
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,如何做到这一点?
当前堆栈:[Frag A、Frag B、Frag C 和 Frag D]
意图:导航到 Frag E,从堆栈中清除 [Frag B、Frag C 和 Frag D]
结果堆栈:[Frag A 和 Frag E]
【问题讨论】:
标签:
android
android-architecture-navigation
android-navigation
【解决方案1】:
如果您在导航图操作中导航,通过指定您需要您的操作来 popUpTo 某个片段,这将是一项简单的任务,如下所示:
<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 标志的意思是(你想popUpTo B_Frag 包括B_Frag(True) 还是排除它(False))。
这个动作会从栈顶弹出所有片段,直到它到达B_Frag,然后到目的地E_Frag。
和通过
浏览导航图操作
我的意思是你在 D Fragment 中使用类似这样的代码行来导航
NavHostFragment.findNavController(DFrag.this)
.navigate(R.id.action_DFrag_To_EFrag);
注意:代码中的三个点 (...) 表示我不在乎那里写的是什么代码,您可以删除这三个点并包含您想要的任何内容