问题:
BottomBar有4个目的地:ScreenA、ScreenB、ScreenC和ScreenD。
在ScreenA上按下按钮(不是下栏项)时,我想使用参数转到ScreenB。
代码:
NavGraph
AnimatedNavHost(navController = navController, startDestination = "screen_a") {
composable("screen_a") {
ScreenA(navToScreenB = {
navController.navigate("screen_b?param=1") {
})
}
navigation(
route = "screen_b",
startDestination = "screen_b?param={param}",
) {
composable(
route = "screen_b?param={param}",
arguments = listOf(navArgument("param") { type = NavType.IntType })
) { backStackEntry ->
val param = backStackEntry.arguments?.getBoolean("param") ?: 0
ScreenB(param = param)
}
composable(route = "screen_b/details") {
ScreenB_details(...)
}
}
}BottomBar
fun BottomNavigation(navController: NavController, selectedNavigation: Screen) {
val items = listOf(...)
BottomNavigation(
backgroundColor = MaterialTheme.colors.primary
) {
items.forEach { item -> BottomNavigationItem(
onClick = {
navController.navigate(item.screen.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route) { saveState = true }
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
}到目前为止,单击ScreenA上的按钮将我导航到ScreenB,但是param值始终为0,因为我永远不会传递在navToScreenB lambda中传递的arg。我使用的是compose_version =‘1.2.0-alpha 04’和compose_version
发布于 2022-04-08 17:09:53
结果表明,路由中的{param}和navArgument({param})必须完全相同,即使路径看起来正确并且路由中有args。
发布于 2022-09-28 01:00:46
详细说明上面@Kamil的答案,如果您是在BottomNavigationItem.onClick中这样做的
navController.navigate(item.screen.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route) { saveState = true }
}
launchSingleTop = true
restoreState = true
}然后,您还应该在其他地方执行相同的参数,这时需要对BottomNavigationItem进行更改。
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route) { saveState = true }
}
launchSingleTop = true
restoreState = truehttps://stackoverflow.com/questions/71427418
复制相似问题