![](/img/trans.png)
[英]Is Jetpack Compose BottomNavBar? How can use bottomNavbar any Example?
[英]Navigate the BottomNavBar on Button click - Jetpack Compose
我的 BottomNavigationBar 有 4 个项目,我想在用户单击按钮时导航到最后一个项目。
这是我的底部导航栏:
@Composable
fun BottomNavigationBar(navController: NavController) {
val items = listOf(
BottomNavigationItem.Home,
BottomNavigationItem.Explore,
BottomNavigationItem.Favorites,
BottomNavigationItem.Profile
)
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
BottomNavigation(
backgroundColor = colorResource(id = R.color.purple_700),
contentColor = Color.White
) {
Row(horizontalArrangement = Arrangement.Center) {
items.forEachIndexed { i, item ->
if (i == items.count() / 2) {
Spacer(Modifier.weight(1f))
}
BottomNavigationItem(
icon = {
if (currentRoute == item.route) {
Icon(painterResource(id = item.iconPressed), contentDescription = item.title)
} else {
Icon(painterResource(id = item.iconNormal), contentDescription = item.title)
}
},
selectedContentColor = Color.White,
unselectedContentColor = Color.White,
alwaysShowLabel = false,
selected = currentRoute == item.route,
onClick = {
navController.navigate(item.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route) {
saveState = true
}
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
}
}
以下是当用户单击按钮时(在我的 MainActivity NavGraph 中)我尝试导航到“配置文件”屏幕的方式:
composable(BottomNavigationItem.Favorites.route) {
FavoriteScreen(navigateToProfile = {
navController.navigate(BottomNavigationItem.Profile.route) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
})
}
不幸的是,这给了我一个奇怪的行为,即我的 BottomNavigationBar 无法正常工作,主要是第一个屏幕不再打开。
事情变得混乱,“HomeScreen”bottomNavItem 在远程导航后导航到“ProfileScreen”。
远程导航bottomNavigationBar的正确方法是什么?
经过几个小时试图了解我的问题所在,我想出了一个潜在的解决方案。 如果您的BottomNavigationItem
具有与之关联的复杂图形,我不确定这是否是一种可持续的方法,但是对于我的用例,在onClick
其标记为restoreState = false
解决了该问题。
onClick = {
navController.navigate(item.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
}
launchSingleTop = true
restoreState = false
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.