Mah*_*alv 65 android android-jetpack-navigation android-jetpack-compose jetpack-compose-navigation
我正在使用compose-navigation(alpha09) 来处理可组合项之间的导航
我想在移动到下一个目的地时删除启动屏幕(我不希望按下后背返回启动屏幕)
以下尝试未按预期工作:
navHostController.navigate(Route.login.id) {
navHostController.graph.clear()
}
Run Code Online (Sandbox Code Playgroud)
navHostController.navigate(Route.login.id)
navHostController.graph.clear()
Run Code Online (Sandbox Code Playgroud)
val currentDest = navHostController.currentDestination
navHostController.navigate(Route.login.id)
if (currentDest != null) {
navHostController.graph.remove(currentDest)
}
Run Code Online (Sandbox Code Playgroud)
那么如何删除启动屏幕然后转到下一步呢?
ikn*_*now 84
在 Jetpack Compose 中1.0.0导航并从返回堆栈中删除以前的 Composable 您可以使用:
navController.navigate(Screens.Login.name) {
popUpTo(Screens.Splash.name) {
inclusive = true
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将从Splash屏幕导航到Login并弹出所有内容,包括Splash屏幕。
Mah*_*alv 73
对于v1.0.0-alpha09(和 1.0 稳定版)
使用popUpTo(0)您可以在导航到下一个目的地之前清除堆栈。所以:
navHostController.navigate(Route.login.id) {
// popUpTo = 0 // DEPRECATED
popUpTo(0)
}
Run Code Online (Sandbox Code Playgroud)
bbo*_*eck 21
对于不需要知道当前路线的一致可重用函数,请使用此 NavOptionsBuilder 扩展函数
fun NavOptionsBuilder.popUpToTop(navController: NavController) {
popUpTo(navController.currentBackStackEntry?.destination?.route ?: return) {
inclusive = true
}
}
Run Code Online (Sandbox Code Playgroud)
^ 与其他答案类似,它 popUpTo 当前路由,但不需要命名特定的当前路由,而是从 backstack 条目中获取它。
现在你可以像这样使用它:
navController.navigate(ScreenRoutes.Login.route) { popUpToTop(navController) }
Run Code Online (Sandbox Code Playgroud)
^ 该示例导航到登录,并且应该清除它之前的整个后台堆栈。
Ban*_*vic 17
除了屏幕之外,返回堆栈还包含导航图,并且其根始终是返回堆栈中的第一个内容。我们的 NavHostController 包含图表,因此通过弹出其 id,您可以清除返回堆栈:
popUpTo(navHostController.graph.id)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,这里是详细说明 https://medium.com/@banmarkovic/jetpack-compose-clear-back-stack-popbackstack-inclusive-explained-14ee73a29df5
用于清除所有返回堆栈
要从堆栈中删除多个可组合屏幕,请使用以下代码片段
navController.navigate(ScreenRoutes.Login.route){
popUpTo(navController.graph.findStartDestination().id){
inclusive = true }}
Run Code Online (Sandbox Code Playgroud)
或者将 Home 保留在后堆栈中
navController.navigate(ScreenRoutes.SelectCourseLayout.route){
popUpTo(ScreenRoutes.Home.route)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38979 次 |
| 最近记录: |