Как разделить общие действия (или действия) между несколькими графами навигации?

Я использую библиотеку навигации в своем приложении для Android с несколькими действиями, и я хотел бы знать, есть ли способ поделиться некоторыми действиями (которые открывают определенную страницу с предопределенными аргументами) между несколькими захватами навигации. Это выглядит так:

  1. Существует ActivityB, которому требуются аргументы a, b, c в его действии навигации.
  2. ActivityA имеет NavGraphA, который открывает ActivityB.
  3. ActivityC имеет NavGraphC, который также открывает ActivityB.

Теперь я хотел бы использовать действие, которое открывает ActivityB как в NavGraphA, так и в NavGraphC, желательно без дублирования действия, его аргументов и самого действия в обоих графики (например, какие-то включения?).

Я знаю, что можно определить ActivityB как элемент активности на обоих графиках, но тогда мне нужно снова определить действие с теми же аргументами снова и снова.

Мне нужно будет сделать что-то подобное в обоих графиках:

    <fragment
            android:id="@+id/xyFragment"
            android:name="x.y.fragment"
            android:label="xyFragment" >
        <action
                android:id="@+id/action_xyFragment_to_ActivityB"
                app:destination="@id/activityB" />
    </fragment>
    <activity
            android:id="@+id/activityB"
            android:name="x.y.ActivityB"
            android:label="ActivityB" >
        <argument
                android:name="a"
                app:argType="argument.A" />
        <argument
                android:name="b"
                app:argType="argument.B" />
        <argument
                android:name="c"
                app:argType="argument.C" />
    </activity>

Как видите, я могу либо объединить эти аргументы в один класс, что уменьшит количество аргументов, но исходная проблема все равно останется.

Или я могу просто продублировать его с разными идентификаторами.

Может быть, есть способ как-то включить общие глобальные действия в несколько графов?


person Pepa Novotný    schedule 16.10.2019    source источник


Ответы (1)


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

Добавьте ActivityB либо в NavGraphA, либо в NavGraphC, затем сделайте его глобальным, щелкнув правой кнопкой мыши -> добавить действие -> глобально в представлении дизайна навигации.

Таким образом, как ActivityA, так и ActivityC могут перейти к ActivityB, используя его id: например. R.id.action_global_activityB  введите описание изображения здесь

Дополнительные сведения см. В Глобальные действия.

person user2301281    schedule 13.12.2019