如何使用导航组件清除返回堆栈中的每个片段(例如,当 HTTP 401 触发时)并发送到登录片段

How can I clear every fragments in back stack using Navigation Component (for example when HTTP 401 triggeres) and sent to login fragment

我们有下一个属性要在打开另一个属性时删除 fragment/fragments。

app:popUpTo="..."
app:popUpToInclusive="true"

但是,如果我需要清除所有返回堆栈,而不知道第一个 ID 是第一个(并且开始目的地可能已经从堆栈中删除),例如 401 事件。

我该怎么做?

例如,我可能在后台堆栈中有 5 个片段,但我不知道第一个片段的 ID,如何将它们全部删除并打开一个登录片段?

更新的答案:

我们可以使用 R.id.nav_graph(我们的导航图的 ID)setPopUpTo() 来完全清除后台堆栈

val navOptions = NavOptions.Builder()
    .setPopUpTo(R.id.nav_graph, true)
    .build()
navController.navigate(R.id.loginFragment, null, navOptions)

上一个回答:

我实现了这个解决方案,虽然看起来很难

navController.graph = navController.graph.apply {
    startDestination = R.id.loginFragment
}
val navOptions = NavOptions.Builder()
    .setPopUpTo(R.id.loginFragment, true)
    .build()
navController.navigate(R.id.loginFragment, null, navOptions)

但它有效并清除了所有返回堆栈,堆栈中只有一个 loginFragment