如何使用多个 NavHost 片段创建深层链接

Posted

技术标签:

【中文标题】如何使用多个 NavHost 片段创建深层链接【英文标题】:HowTo create deep links with multiple NavHostFragments 【发布时间】:2020-05-26 14:23:51 【问题描述】:

我发现的示例要么显示将用于深度链接的单个(嵌套)导航图,要么显示具有多个 NavHostFragment 但不提供深度链接的嵌套导航。


我有以下场景:

MainActivity

拥有处理主导航到 HomeFragment、PostsFragment、ProfileFragment 的 main-NavHostFragment。主页、帖子s和个人资料应显示在底部导航中。

PostFragment

帖子的详细信息片段。当我们点击 PostsFragment 中的列表项时,它将被打开。此布局有一个 NavHostFragment 处理有关帖子的子导航(PostDetailsFragment、PostCommentsFragment)


如何使用多个 NavHostFragment 提供指向 myapp://post/postId/cmets 的深层链接?

最好的,

克里斯

【问题讨论】:

【参考方案1】:

我认为您不需要多个导航主机片段。请开始研究这个项目https://github.com/android/architecture-components-samples/tree/master/NavigationAdvancedSample,特别是这些扩展:https://github.com/android/architecture-components-samples/blob/master/NavigationAdvancedSample/app/src/main/java/com/example/android/navigationadvancedsample/NavigationExtensions.kt。

您的活动布局应该与此类似:

    <!-- Fragments Container -->

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/nav_host_container"
        android:layout_
        android:layout_
        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/appBarLayout" />

    <!-- Bottom Navigation View -->

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNavigationView"
        android:layout_
        android:layout_
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_navigation_menu" />

您可以将深层链接保留在清单中提到的导航图的嵌套图中。在你的嵌套图中,别忘了用&lt;deepLink.../&gt;标记你的着陆片段

【讨论】:

谢谢。但我实际上想要两个 navHost。因为我希望能够独立于外部片段导航内部片段。 基于导航图的链接背后的想法是重建 backstack。就您而言,我不明白用户将如何/在哪里“支持”。我想知道这甚至是可能的 - 不要这么认为。 我认为外部的 navHost 可能是默认的并接收回压事件。我还认为我可以在外部片段中侦听后面的事件。这样做时,我会检查内部导航控制器是否需要 popBack 内部控制器或 popBack 外部控制器。所以我的想法...... :)

以上是关于如何使用多个 NavHost 片段创建深层链接的主要内容,如果未能解决你的问题,请参考以下文章

如何通过邮件中的android深层链接打开片段?

Jetpack 将深层链接组合到嵌套导航中

使用 navhost 在底部导航中停止片段刷新

如何使用导航架构组件查找子片段

如何创建保持相同顺序的链接列表的深层副本

如何从移动浏览器打开深层链接?