【发布时间】:2023-03-03 20:43:01
【问题描述】:
下面是底部nav实现的概述。应用程序显示底部导航栏,但选择项目时,它会多次调用navhost。我看到 Jetpack compose samples https://github.com/android/compose-samples/tree/main/Jetsnack 的类似问题。是否有任何解决方法可以避免多次 Navhost 调用?
@Composable
fun MainScreen() {
val navController = rememberNavController()
Scaffold(
bottomBar = { BottomMenu(navController = navController) }
) {
BottomNavGraphBar(navController = navController)
}
}
// handling the click event
BottomNavigationItem(
onClick = {
navController.navigate(screen.route) {
popUpTo(navController.graph.findStartDestination().id)
launchSingleTop = true
}
}
)
//NavHost implementation
@Composable
fun BottomNavGraphBar(navController: NavHostController) {
NavHost(
navController = navController,
startDestination = Screen.Home.route
) {
composable(route = Screen.Home.route) {
Log.d("BottomNavGraph","BottomNavGraph->HomeScreen")
HomeScreen()
}
composable(route = Screen.Settings.route) {
Log.d("BottomNavGraph","BottomNavGraph->AppSettingsScreen")
AppSettingsScreen()
}
composable(route = Screen.Profile.route) {
Log.d("BottomNavGraph","BottomNavGraph->ProfileScreen")
ProfileScreen()
}
}
}
<!---LogCat-->
// When app is launched
BottomNavGraph->HomeScreen
BottomNavGraph->HomeScreen
// clicked on the profile.
BottomNavGraph->HomeScreen
BottomNavGraph->ProfileScreen
BottomNavGraph->HomeScreen
BottomNavGraph->ProfileScreen
【问题讨论】:
-
这是预期行为。在动画期间,重组可以连续发生多次,最多每帧一次。这正是在这种情况下发生的事情 - 两条路线之间的过渡:旧路线正在消失,而新路线正在出现。
标签: android kotlin android-jetpack-compose android-bottomnav