Jetpack Compose:底栏和嵌套导航

问题描述 投票:0回答:1

我在 Jetpack Compose 应用程序的项目中设置了一个底部栏,有 2 个目的地。我尝试遵循 Google 的示例。

例如,它看起来像这样:

@Composable
fun ExampleBottomBar(navController: NavHostController) {
val items = listOf(
    BottomNavigationGraph.Graph1,
    BottomNavigationGraph.Graph2
)
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination

BottomNavigation {
    items.forEach { screen ->
        BottomNavigationItem(
            onClick = {
                navController.navigate(screen.route) {
                    popUpTo(navController.graph.findStartDestination().id) {
                        saveState = true
                    }

                    launchSingleTop = true
                    restoreState = true

                }
            },
            selected = currentDestination?.hierarchy?.any { it.route == screen.route } == true,
            icon = { Icon(imageVector = screen.icon, contentDescription = null) },
            label = { Text(stringResource(screen.label)) }
        )
      }
     }
    }

一切正常,我可以在两个目的地之间导航。但是,当我从

Graph-1 Screen-2
导航到
Graph-2 Screen-2
时,它导航没有任何问题。但是当我按
Graph-1
上的底部选项卡时,它不起作用。底部选项卡似乎不再可点击。 所以我尝试了这个解决方案来导航到嵌套屏幕(不同的图表):

navigate(route) {
    launchSingleTop = true
    restoreState = false
    popUpTo(graph.findStartDestination().id) {
        saveState = true
    }
}

现在这个解决方案完美运行。现在,当我单击

Graph-1
的底部选项卡时,它会切换并保留
Graph-1 Screen-2
的状态,但是当我从
Graph-2 Screen-2
按后退按钮时,它会直接导航到
Graph-1 Screen-1
,这基本上为
Graph-1 Screen-1
创建了另一个堆栈。 所以基本上我想要的是在后按或 BottomTab 单击时保留
Graph-1 Screen-2
的状态。

我做错了什么还是这是一个错误? 有人可以帮我吗? 预先感谢。

android android-jetpack-compose android-architecture-navigation android-navigation jetpack-compose-navigation
1个回答
0
投票

就我而言,将

saveState
中的
restoreState
NavOptionsBuilder
设置为
false
有助于解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.