在导航图中多次使用相同的片段

时间:2019-09-10 18:18:16

标签: android android-architecture-navigation

我想迁移我的项目以使用导航组件。 在我的活动中,有一个底部导航,该导航在同一Fragment的不同实例之间导航(带有不同的参数)。

Here解释了有关bottomNavigation支持的信息。 但是是否可以在同一导航图中以不同的ID和参数重用相同的Fragment?

我在Google文档中找不到方法。

1 个答案:

答案 0 :(得分:3)

您应该能够使用多个目标定义nav_graph并重用相同的片段。像这样的东西

<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/navigation_tab1">

  <fragment
      android:id="@+id/navigation_tab1"
      android:name="com.myapp.MyFragment"
      android:label="Tab1">

      <action
          android:id="@+id/action_goto_page1"
          app:destination="@id/navigation_page1" />
      <argument
          android:name="tab1_arg1"
          android:defaultValue="Default"
          app:argType="string" />
  </fragment>

  <fragment
      android:id="@+id/navigation_tab2"
      android:name="com.myapp.MyFragment"
      android:label="Tab2">

      <action
          android:id="@+id/action_goto_page2"
          app:destination="@id/navigation_page2" />
      <argument
          android:name="tab2_arg1"
          android:defaultValue="Default"
          app:argType="string" />
  </fragment>

  <fragment
      android:id="@+id/navigation_tab3"
      android:name="com.myapp.MyFragment"
      android:label="Tab3">

      <action
          android:id="@+id/action_goto_page3"
          app:destination="@id/navigation_page3" />
      <argument
          android:name="tab3_arg1"
          android:defaultValue="Default"
          app:argType="string" />
  </fragment>
</navigation>

但是,最好将您的代码重构为具有多个Fragment(每个都做一件事),以便更好地维护和清理代码。