Использование Serializable в качестве аргумента глубокой связи с компонентом навигации Android - PullRequest
0 голосов
/ 06 ноября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...