繁体   English   中英

在按钮单击时导航 BottomNavBar - Jetpack Compose

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM