当前位置: 首页 > 知识库问答 >
问题:

Jetpack组合导航:从不同的底部栏屏幕导航到底部栏目的地

南门棋
2023-03-14

BottomBar有4个目的地:ScreenA,ScreenB,ScreenC和ScreenD。

在ScreenA上按下按钮(不是底部栏项)时,我想使用参数转到ScreenB。

导航图

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(...)
        }
    }
}

底部栏

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,但参数值始终为0,因为我永远不会传递在navToScreenBlambda中传递的参数。我使用的是compose_version='1.2.0-alpha04'和"androidx.navigation: navation-comuse: 2.5.0-alpha03"

共有1个答案

范浩宕
2023-03-14

事实证明,路由中的 {param}navArgument({param}) 必须完全相同,即使路径看起来正确且路由中有 args

 类似资料:
  • Tabbar 底部导航栏 1.4.8 优点: 此组件一般用于应用的底部导航,具有如下特点: 可以设置凸起的按钮,且是全端通用的 图标可以使用字体图标(内置图标和扩展图标)或者图片 可以动态切换菜单的数量以及配置 切换菜单之前,可以进行回调鉴权 可以设置角标 有效防止组件区域高度塌陷,无需给父元素额外的内边距或者外边距来避开导航的区域 缺点: 虽然优点很多,但是如果用此组件模拟tabbar页面的话依

  • 我的主要活动中有一个底部导航栏。通过单击底部导航中的一个选项卡,我想更改视图中的片段。我有以下代码:主要活动: } 我的一个片段: 如果我单击其中一个选项卡,就会显示正确的片段,因此这是可行的。然而,当新片段出现时,我想单击另一个选项卡来显示另一个片段,这就行不通了。底部导航栏不会对单击做出反应。甚至日志。i语句不起作用,因此似乎没有调用导航项SelectedListener。 我对android

  • 本文向大家介绍Flutter实现底部导航栏,包括了Flutter实现底部导航栏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Flutter实现底部导航栏的具体代码,供大家参考,具体内容如下 效果 实现 先将自动生成的main.dart里面的代码删除, 创建app.dart作为首页的页面文件 创建today.dart、kb.dart、playground.dart三个页面文件作为ta

  • 本文向大家介绍android实现底部导航栏,包括了android实现底部导航栏的使用技巧和注意事项,需要的朋友参考一下 底部导航栏我选择用FragmentTabHost+Fragment来实现,这个方法比较好用,代码量也不多 首先是开始的activity_main.xml 也可以直接在xml文件里面写 这xml文件就一个view加一个tab  view用来显示碎片,tab用来放置底部按钮的数量 再

  • 我有一个关于底部导航栏的奇怪问题,虽然我花了大量时间在它上面,但我无法解决。当我以“推荐”的方式(从许多教程中)使用它时,它就是无法导航。 那么,我所说的“推荐”方式是什么意思呢:我有一个单独的acticity,其中有一个名为“MainActivity”的navHostFragment。这个主要活动有一个XML布局文件,我将底部导航栏放在其中。BottomNavigationBar还有一个XML布

  • 我正在使用谷歌的支持设计库V25.1.0在Android应用程序中实现底部导航栏。有没有什么方法可以添加阴影效果,就像现在的Android原生谷歌照片应用一样?