Можно ли использовать пользовательский объект 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
класс. Можно ли как-то зарегистрировать адаптер, который знает, как его конвертировать? Или, может быть, есть другое решение?