【发布时间】:2021-01-06 18:24:09
【问题描述】:
我正在尝试将 Navigation Safe Args 与 Kotlinx @Serializable 类型一起使用,但在运行时传递可序列化数据时,我一直遇到同样的问题:
Caused by: java.lang.IllegalArgumentException: com.example.serializablesafeargsnavigation.shared.Model.SerializableModel is not Serializable or Parcelable.
在我的 nav_graph.xml 我有以下内容:
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/firstFragment">
<fragment
android:id="@+id/firstFragment"
android:name="com.example.serializablesafeargsnavigation.androidApp.FirstFragment"
android:label="FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.example.serializablesafeargsnavigation.androidApp.SecondFragment"
android:label="SecondFragment">
<argument
android:name="arg"
app:argType="com.example.serializablesafeargsnavigation.shared.Model.SerializableModel" />
</fragment>
</navigation>
我的 SerializableModel 看起来像这样:
@Serializable
data class SerializableModel(
@SerialName("some_value")
val someValue: String
)
有没有人找到解决方法来使用 Safe Args 进行这项工作。如果您使用导航 API 传递 Bundle,它会起作用,但如果可能,我想使用 Safe Args。
我正在使用的版本
- plugin.serialization: 1.4.21
- navigation-safe-args-gradle-plugin: 2.3.2
- androidx.navigation:navigation-ui-ktx: 2.3.2
- androidx.navigation:navigation-fragment-ktx: 2.3.2
- kotlinx-序列化核心:1.0.1
提前致谢!
【问题讨论】:
-
请分享一些代码,以便理解。
-
@rahat 感谢您的意见!我用一些代码更新了帖子。
标签: android android-architecture-navigation kotlin-multiplatform kotlinx.serialization android-safe-args