使用深层链接时是否可以使用自定义Serializable
对象作为片段参数?
我尝试了以下方法 - 在我的导航图 XML 文件中,我添加了以下几行:
<fragment
android:id="@+id/eventFragment"
android:name="com.myapp.EventFragment"
android:label="EventFragment">
<argument
android:name="event"
app:argType="com.myapp.EventId" />
<deepLink app:uri="myapp://event/{event}" />
</fragment>
EventId
可序列化的数据类在哪里:
data class EventId(val value: Long) : Serializable
然后,当我尝试使用 URL 运行我的应用程序时myapp://event/4002
,会引发以下异常:
Caused by: java.lang.UnsupportedOperationException: Serializables don't support default values.
at androidx.navigation.NavType$SerializableType.parseValue(NavType.java:834)
at androidx.navigation.NavType$SerializableType.parseValue(NavType.java:787)
at androidx.navigation.NavType.parseAndPut(NavType.java:96)
at androidx.navigation.NavDeepLink.getMatchingArguments(NavDeepLink.java:99)
at androidx.navigation.NavDestination.matchDeepLink(NavDestination.java:366)
at androidx.navigation.NavGraph.matchDeepLink(NavGraph.java:79)
at androidx.navigation.NavController.handleDeepLink(NavController.java:540)
at androidx.navigation.NavController.onGraphCreated(NavController.java:499)
at androidx.navigation.NavController.setGraph(NavController.java:460)
at androidx.navigation.NavController.setGraph(NavController.java:425)
at androidx.navigation.NavController.setGraph(NavController.java:407)
at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.java:236)
long
用( )替换类型可以app:argType="long"
解决问题 - 没有例外,一切都按预期工作。
导航库似乎不知道如何将原始值从 URL 转换为我的EventId
类。是否有可能以某种方式注册一个知道如何转换它的适配器?或者也许还有另一种解决方案?