0

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

  1. 存在ActivityB在其导航操作中需要参数abc 。
  2. ActivityANavGraphA打开ActivityB
  3. ActivityCNavGraphC,它也打开ActivityB

现在我想使用在NavGraphANavGraphC中打开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 复制它。

也许有一种方法可以以某种方式在多个图表中包含共享的全局动作?

4

1 回答 1

0

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

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

因此 ActivityA 和 ActivityC 都可以通过使用它的 id 导航到 ActivityB:例如。R.id.action_global_activityB 在此处输入图像描述

有关更多详细信息,请参阅全局操作

于 2019-12-13T01:52:01.523 回答