相关疑难解决方法(0)

如何在jetpack compose中传递导航中的对象?

文档中,我可以传递字符串、整数等。但是如何在导航上传递对象呢?

注意:如果我设置参数类型 Parcelable,则应用程序会崩溃并显示java.lang.UnsupportedOperationException: Parcelables don't support default values..

composable(
    "vendor/details/{vendor}",
        arguments = listOf(navArgument("vendor") {
            type = NavType.ParcelableType(Vendor::class.java)
        })
) {
// ...
}
Run Code Online (Sandbox Code Playgroud)

android-jetpack-compose jetpack-compose-navigation

31
推荐指数
1
解决办法
3万
查看次数

使用撰写导航传递 Parcelable 参数

我想BluetoothDevice使用组合导航将 Parcelable 对象 ( ) 传递给可组合对象。

传递原始类型很容易:

composable(
  "profile/{userId}",
  arguments = listOf(navArgument("userId") { type = NavType.StringType })
) {...}
Run Code Online (Sandbox Code Playgroud)
navController.navigate("profile/user1234")
Run Code Online (Sandbox Code Playgroud)

但是我不能在路由中传递一个parcelable 对象,除非我可以将它序列化为一个字符串。

composable(
  "deviceDetails/{device}",
  arguments = listOf(navArgument("device") { type = NavType.ParcelableType(BluetoothDevice::class.java) })
) {...}
Run Code Online (Sandbox Code Playgroud)
val device: BluetoothDevice = ...
navController.navigate("deviceDetails/$device")
Run Code Online (Sandbox Code Playgroud)

上面的代码显然不起作用,因为它只是隐式调用toString().

有没有办法要么序列化ParcelableString,所以我可以通过它的路线或通过导航参数作为比其他函数的对象navigate(route: String)

android kotlin android-jetpack-navigation android-jetpack-compose

13
推荐指数
5
解决办法
2672
查看次数