android 将URL作为参数传递给Jetpack编写导航

mutmk8jj  于 2023-11-15  发布在  Android
关注(0)|答案(2)|浏览(92)

我已经在我的应用程序中为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"),它就可以工作。

aiazj4mn

aiazj4mn1#

导航路由相当于url,一般来说你应该在这里传递类似id的东西。
当你需要在另一个url中传递一个url时,你需要对它进行编码:

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

字符串
请注意,您不需要在视图端解码参数,因为Navigation库将为您完成此操作。

wztqucjr

wztqucjr2#

怎么会这样?

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

字符串

相关问题