【问题标题】:Passing URL as a parameter to Jetpack Compose Navigation将 URL 作为参数传递给 Jetpack Compose Navigation
【发布时间】:2021-08-27 09:04:09
【问题描述】:

我在我的应用中为HistoryDetail 屏幕创建了一个目的地。

composable(
    route = "HistoryDetail/{webpage}",
    arguments = listOf(
        navArgument("webpage") {
            type = NavType.StringType
        }
    ),
) { entry ->
    val text = entry.arguments?.getString("webpage") ?: ""
}

当我尝试通过调用导航到该屏幕时:

navController.navigate("HistoryDetail/http://alphaone.me/")

我收到了illegalArgumentException 的以下消息。

java.lang.IllegalArgumentException: Navigation destination that matches request NavDeepLinkRequest{ uri=android-app://androidx.navigation/HistoryDetail/http://alphaone.me/ } cannot be found in the navigation graph NavGraph(0x0) startDestination={Destination(0x78c9ba0c) route=Home}

编辑:

如果我打电话给:navController.navigate("HistoryDetail/test"),它会起作用。

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

    导航路线相当于网址。通常你应该在那里传递类似id 的东西。

    当你需要在另一个 url 中传递一个 url 时,你需要对其进行编码:

    val encodedUrl = URLEncoder.encode("http://alphaone.me/", StandardCharsets.UTF_8.toString())
    navController.navigate("HistoryDetail/$encodedUrl")
    

    【讨论】:

    • 在我的例子中,它抛出了一个异常:java.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8] at java.nio.charset.Charset.checkCharsetName(Charset.java:201)。为了解决这个问题,我用“UTF-8”字符串替换了StandardCharsets.UTF_8.toString()
    【解决方案2】:

    这是怎么回事?

    composable(
        route = "HistoryDetail?webpage={webpage}",
        arguments = listOf(
            navArgument("webpage") {
                type = NavType.StringType
            }
        ),
    ) { entry ->
        val text = entry.arguments?.getString("webpage") ?: ""
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 2021-08-31
      • 2022-09-25
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多