Joh*_*neh 12 android android-navigation android-jetpack-compose jetpack-compose-navigation
是否可以在 Android/Jetpack Compose 中预填充导航后台?
我有一个深层链接,可以深入导航层次结构,但是,按后退时,它会导航到根路线。
例子:
Route.Main -> Route.List -> Route.Details(参数:id)
深层链接: https: //mywebsite.com/details/id
当前行为:它使用正确的参数打开 Route.Details,但是,在 onBack 时,它打开 Route.Main
期望的行为:它应该打开 Route.List
我知道我可以手动“编程”此行为,但我更喜欢“配置”它。
我以前也遇到过类似的问题,似乎这是图书馆的预期行为。我的意思是,如果用户从显示 Screen_C 的深层链接打开应用程序,然后按返回,则应显示应用程序的主屏幕。因此,也许您需要重新验证应用程序的可用性。
但是,即使您想采取解决方法来手动处理后按。使用下面的函数
fun navigatingBack(
navController: NavHostController,
destinationRoute: String
) {
val hasBackstackTheDestinationRoute = navController.backQueue.find {
it.destination.route == destinationRoute
} != null
// if the destination is already in the backstack, simply go back
if (hasBackstackTheDestinationRoute) {
navController.popBackStack()
} else {
// otherwise, navigate to a new destination popping the current destination
navController.navigate(destinationRoute) {
navController.currentBackStackEntry?.destination?.route?.let {
popUpTo(it) {
inclusive = true
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设您声明了屏幕ScreenA、ScreenB和ScreenC。
composable("__A__") {
ScreenA(navController)
}
composable("__B__") {
ScreenB(navController)
}
composable("__C__") {
ScreenC(navController)
}
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作:
@Composable
fun ScreenA(navController: NavHostController) {
Button(onClick = {
navController.navigate("__B__")
}) {
Text(text = "Screen A - Go to B")
}
}
@Composable
fun ScreenB(navController: NavHostController) {
Button(onClick = {
navController.navigate("__C__")
}) {
Text(text = "Screen B - Go to C")
}
BackHandler {
navigatingBack(navController, "__A__")
}
}
@Composable
fun ScreenC(navController: NavHostController) {
Text(text = "Screen C")
BackHandler {
navigatingBack(navController, "__B__")
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的示例,如果直接导航到ScreenC并按返回,ScreenB将显示 。类似的情况也发生在 中ScreenB,ScreenA按下后退按钮时会显示 。
| 归档时间: |
|
| 查看次数: |
2102 次 |
| 最近记录: |