Передача аргументов во вложенный граф компонентов архитектуры навигации - PullRequest
0 голосов
/ 01 февраля 2019

Как передать один или несколько аргументов во вложенный граф компонентов архитектуры навигации?

Допустим, я строю свой граф навигации для навигации из FragmentA --> Nested, где Nested содержит FragmentB --> FragmentC ...

Если бы это был чистый FragmentA --> FragmentB... график, я бы просто настроил навигацию с помощью FragmentADirections.actionFragmentAToFragmentB(argument = foo).Но это действие принимает нулевые аргументы, как только вы превращаете B --> C в Nested ...

Так что я должен делать?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

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

Примером, связанным с вопросом, будет:

Сохраните вложенный график в nested_graph.xmlэто будет выглядеть примерно так:

<navigation
    android:id="@+id/nested_graph"
    app:startDestination="@id/fragmentB"
    ...>

    <fragment 
        android:id="@+id/fragmentB"
        ...>
        <argument
            android:name="foo"
            app:argType="integer"/>
        <action 
            ... // navigation action to FragmentC />
    </fragment>

    <fragment ...  // FragmentC stuff
</navigation>

Чтобы передать аргументы nested_graph.xml из другого графа, скажем root_graph.xml do

<navigation
    android:id="@+id/root_graph"
    app:startDestination="@id/fragmentA"
    ...>

    <fragment 
        android:id="@+id/fragmentA"
        ... >
        <action
            android:id="@+id/action_fragmentA_to_nested_graph"
            app:destination="@id/nested_graph">
            <argument
                android:name="foo"
                app:argType="integer"/>
        </action>
    </fragment>
    <include app:graph="@navigation/nested_graph"/>
</navigation>

Другими словами, просто добавьте то же самое <argument ... /> на root_graph действие, которое вы ожидаете получить в nested_graph.

0 голосов
/ 01 февраля 2019

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

<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"
        android:id="@+id/mobile_navigation"
        app:startDestination="@id/mainFragment">


<activity android:id="@+id/playbackActivity"
          android:name="com.cinderellaman.general.ui.activities.PlaybackActivity"
          android:label="activity_playback"
          tools:layout="@layout/activity_playback">
    <argument android:name="videoId"
              app:nullable="true"/>
    <argument android:name="position"
              app:argType="integer"
              android:defaultValue="1"/>
</activity>
<action android:id="@+id/action_global_playbackActivity"
        app:destination="@id/playbackActivity"/></navigation>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...