【问题标题】:how to open multiple instances of a fragment in navigation component?如何在导航组件中打开一个片段的多个实例?
【发布时间】:2020-12-15 07:57:33
【问题描述】:
我正在开发一个社交媒体应用程序。当用户单击帖子时,会打开一个新片段,并在其下方显示一些相关帖子。如果用户单击相关帖子,则该片段的新实例必须打开并在其下显示点击的帖子和相关帖子。这个页面也有这种行为。每个页面都必须添加到后台堆栈。
用于使用导航组件,在这种情况下,目标片段是具有不同参数的当前片段。
在导航组件中可以这样做吗?
【问题讨论】:
标签:
android
android-fragments
android-architecture-navigation
android-jetpack-navigation
【解决方案1】:
我们可以使用深度链接打开一个片段的多个实例
在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
android:name=".ui.activity.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
<nav-graph android:value="@navigation/navigation" />
</activity>