【问题标题】:How to share common actions (or activities) between multiple navigation graphs?如何在多个导航图之间共享共同的动作(或活动)?
【发布时间】:2019-10-16 09:41:32
【问题描述】:

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

  1. 存在 ActivityB,在其导航操作中需要参数 abc
  2. ActivityA 具有打开 ActivityBNavGraphA
  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 复制它。

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

【问题讨论】:

    标签: android navigation android-jetpack-navigation


    【解决方案1】:

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

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

    因此 ActivityA 和 ActivityC 都可以通过使用它的 id 导航到 ActivityB:例如。 R.id.action_global_activityB

    更多详情请参考Global actions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-31
      • 2018-02-25
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多