如何在多个导航图之间共享常见的动作(或活动)?

时间:2019-10-16 09:41:32

标签: android navigation android-jetpack-navigation

我在具有多个活动的android应用程序中使用导航库,我想知道是否有一种方法可以在多个导航图之间共享某些操作(使用预定义的参数打开某些页面)。 它是这样的:

  1. 存在 ActivityB ,在其导航操作中需要参数 a b c
  2. ActivityA 具有 NavGraphA ,这会打开 ActivityB
  3. ActivityC 具有 NavGraphC ,这也会打开 ActivityB

现在,我想使用在 NavGraphA NavGraphC 中都打开 ActivityB 的操作,最好不要复制活动,其参数和操作本身在两个图表中(例如某种包含?)。

我知道可以在两个图中将 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>

如您所见-我可以将这些参数包装到一个类中,这将减少参数的数量,但是原来的问题仍然存在。

或者我可以用不同的ID复制它。

也许可以通过某种方式在多个图形之间包含共享的全局动作?

1 个答案:

答案 0 :(得分:0)

您可以使用全局操作来创建多个目标可以使用的通用操作。

在NavGraphA或NavGraphC中添加ActivityB,然后在导航设计视图上右键单击->添加动作->全局,将其设置为全局。

因此,ActivityA和ActivityC都可以使用其ID导航到ActivityB:例如。 R.id.action_global_activityB enter image description here

有关更多详细信息,请参见Global actions