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

如何在jetpack撰写中导航参数?

许高峻
2023-03-14

这是我的导航主机

composable(
        "${Screens.Start.route}/{tId}",
        arguments = listOf(navArgument("tId") {
            type = NavType.StringType
        })
    ) {
      
        StartScreen(viewModel, navController, it.arguments?.getString("tId") ?: "")


    }

    composable(
        "${Screens.Timer.route}/{sId}",
        arguments = listOf(navArgument("sId") {
            type = NavType.StringType
        })
    ) {
            TimerScreen(viewModel, navController, it.arguments?.getString("tId") ?: "")
        }


    }

我从主屏幕到“开始”屏幕很幼稚,但没有从“开始”导航到“计时器”屏幕,我已经传递了与从主屏幕获得的相同的ID。

这个主要可组合的

    @Composable
fun Main(task: CustomeTask, navController: NavController) {
    Box(.clickable {
                navController.navigate("${Screens.Start.route}/${task.pid.toString()}")
            }
         }

开始屏幕

    @Composable
fun StartScreen(viewModel: MainViewModel, navController: NavHostController, id : String) {
onclick{
                      navController.navigate("${Screens.Timer.route}/{$id}")

}

当我点击按钮时,应用程序崩溃,错误如下

 java.lang.NumberFormatException: For input string: "{11}"
    at java.lang.Long.parseLong(Long.java:594)
    at java.lang.Long.parseLong(Long.java:636)
    at com.ashish.custometimer.ui.TimerScreenKt.TimerScreen(TimerScreen.kt:36)
    at com.ashish.custometimer.navigation.NavGraphKt$NavGraph$1$6.invoke(NavGraph.kt:64)
    at com.ashish.custometimer.navigation.NavGraphKt$NavGraph$1$6.invoke(NavGraph.kt:58)

共有1个答案

赫连实
2023-03-14

当您声明您的路由时,{tId}中的大括号是让导航将什么解析到您的参数中;您的导航调用中不包含这些大括号。

navController.navigate("${Screens.Timer.route}/$id")
 类似资料:
  • 所以我试图用Jetpack Compose创建一个应用程序。我有一个屏幕功能,它包含一个没有顶部应用程序栏的脚手架,一个用于导航的底部栏和一个设置在底部栏中的浮动操作按钮。这一切都很好。 但是,当我将NavHost添加到脚手架的内容时,整个事情就停止了工作。没有NavHost,一切都很好,只是内容是屏幕的可组合功能。我尝试了不同数量的NavHost可组合位置,不同的填充值都无济于事。 没有NavH

  • 我在一个应用程序上使用jetpack comuse实现了登录、注册。我将登录用户重定向到主屏幕,并让新用户保持在登录屏幕上。但问题是当我将用户从登录屏幕重定向到主屏幕,用户按下返回按钮时,登录屏幕就会出现。现在我知道这是导航组件的正常行为,但我需要更改它。我如何做到这一点? 使用此行从登录屏幕导航到主屏幕

  • 我刚刚开始学习Jetpack Compose,它真的很好,UI是如此简化。我正在学习如何使用Jetpack组合实现所有XML视图,如(Lazycolumn)等。 我想知道如何在Jetpack Compose中显示AdMob横幅广告。我知道我们可以使用互操作性API使用经典的XML视图。 有没有一种组合方式来实现Admob?或者我只能使用 AndroidView 以编程方式创建横幅广告视图。

  • 我在脚手架下添加了自定义顶栏视图。我如何实现TopBar的以下行为,它是Jetpack compose android中脚手架的一部分。(如果无法扩展,则至少隐藏部分) 谢谢你

  • 我正在尝试创建一个底部有隐藏按钮的项目列表。默认情况下,按钮在屏幕上不可见。 如果用户滚动到列表底部,则该按钮应显示为列表的最后一项。 我创作了插图来更好地形象化期望的行为: 草图1:包含几个项目的列表 草图2:有很多项目的列表 我已经尝试了类似问题的解决方案(https://stackoverflow.com/a/69196765/11720296),并添加了额外的偏移量,但不幸的是它不起作用。

  • 目前在Jetpack Compose中,此代码会抛出一个,因为您无法嵌套两个垂直滚动的Composables: 我不希望网格本身滚动,而只是显示我传递到其中的可组合的固定网格。在 中显示非滚动网格是否有任何解决方法?