Компонент навигации Android - внешний включенный граф, получающий один аргумент

Я использую компонент навигации от Jetpack.

Мой основной график огромен, поэтому я решил разбить его на разные графики и использовать функциональность <include />.

Проблема в том, что некоторые из включенных графиков получают аргументы, но Android, похоже, игнорирует аргументы при создании навигации Directions

Ie:

Основной график (упрощенный)

<?xml version="1.0" encoding="utf-8"?>
<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">
    <fragment
        android:id="@+id/listFragment"
         android:name="com......ListFragment">
        <action
            android:id="@+id/view_detail"
            app:destination="@id/item_detail"/>
    </fragment>

    <include app:graph="@navigation/included_graph"/>

</navigation>

Включенный график: (упрощенный)

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_detail"
    app:startDestination="@id/itemDetailFragment">
    <argument
        android:name="item_id"
        app:argType="integer" />
    <fragment
        android:id="@+id/itemDetailFragment"
        android:name="com......ItemDetailFragment">

        <argument
            android:name="item_id"
            app:argType="integer" />
    </fragment>
    [...]
</navigation>

Класс, созданный Android,

class ListFragmentDirections private constructor() {
    companion object {
        fun viewDetail(): NavDirections =
                ActionOnlyNavDirections(R.id.view_detail)
    }
}

Кажется, что аргумент, полученный включенным графом, игнорируется - я не могу безопасно передать аргумент.

Есть ли обходной путь для этого?

Меня интересует любая альтернатива, позволяющая разбить график на файлы меньшего размера, в зависимости от <include /> или нет.




Ответы (1)


Существует обходной путь: явно укажите аргумент действия, т.е.

<?xml version="1.0" encoding="utf-8"?>
<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">
    <fragment
        android:id="@+id/listFragment"
         android:name="com......ListFragment">
        <action
            android:id="@+id/view_detail"
            app:destination="@id/item_detail">
            <argument
                android:name="item_id"
                app:argType="integer" />
        </action>
    </fragment>

    <include app:graph="@navigation/included_graph"/>

</navigation>
person Alex Timonin    schedule 05.11.2020