如何使用导航组件清除返回堆栈中的每个片段(例如,当 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
我们有下一个属性要在打开另一个属性时删除 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