如何在导航组件中打开片段的多个实例?

how to open multiple instances of a fragment in navigation component?

我正在开发一款社交媒体应用程序。当用户单击 post 时,将打开一个新片段,并在其下方显示一些相关的 post。如果用户单击相关的 post,则该片段的新实例必须打开并在其下方显示已单击的 post 和相关的 post。此页面也有此行为。每个页面都必须添加到返回堆栈。

对于使用导航组件,在这种情况下目标片段是具有不同参数的当前片段。 可以在导航组件中执行此操作吗?

我们可以使用深度链接打开片段的多个实例 在 navigation.xm 中:

<fragment
      android:id="@+id/navigation_profile"
      tools:layout="@layout/fragment_profile_owner"
      android:label="@string/profile" >

    <deepLink
        android:id="@+id/profileDeepLink"
        app:uri="myapp://?user_id={user_id}" />

  </fragment>

然后您可以通过以下方式打开新片段:

findNavController().navigate(Uri.parse("myapp://?user_id=${id}"))

您可以通过以下方式在目标片段中获取参数:

arguments?.getString("user_id")

并将其放入清单中的 activity 标记中(如果您想在应用程序外打开此页面):

<activity
            android:name=".ui.activity.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">

            <nav-graph android:value="@navigation/navigation" />

        </activity>