在 Android Navigation 组件中使用 backstack 打开不同层次结构中的片段

Posted

技术标签:

【中文标题】在 Android Navigation 组件中使用 backstack 打开不同层次结构中的片段【英文标题】:open a fragment in a different level of hierarchy with backstack in Android Navigation component 【发布时间】:2021-10-28 10:06:40 【问题描述】:

我在我的项目中使用 导航组件 并且:

我需要在不同的层次结构中打开一个片段,以便正确创建返回堆栈

在我的 nav_graph.xml 中有这样的层次结构:

HomeFragment -> CollocationFragment -> ChapterFragment --[selfNavigate]--> ChapterFragment -> PlayerFragment

当您看到我的片段之一导航到自身并每次发送参数时,如下所示:

<fragment
    android:id="@+id/ChapterFragment ">

    <action
        android:id="@+id/action_chapterFragment_self"
        app:destination="@id/ChapterFragment" />
    <argument
        android:name="chapterID"
        app:argType="Long" />

</fragment>

简而言之,我需要使用适当的 backstack(上面提到的层次结构)从 HomeFragment 中打开 PlayerFragment

HomeFragment ---[my back stack]---&gt; PlayerFragment

我知道似乎 NavDeepLinkBuilder 自己创建了 backstack,但我不知道在这种情况下如何通过使用 Navigation 组件为我的片段创建自定义 backstack。

【问题讨论】:

【参考方案1】:

最终我找到了一种方法......这是一种解决方法,但它就像一个魅力:

所以,只需按照您想要的顺序调用navigate 函数来使层次结构回栈:

 fun openPlayerFromHome()
    
       findNavController.navigate(R.id.HomeFragment)
       findNavController.navigate(R.id.CollocationFragment)
       findNavController.navigate(R.id.ChapterFragment,bundleOf("chapterID",id))
       findNavController.navigate(R.id.PlayerFragment)
    
    

 

【讨论】:

以上是关于在 Android Navigation 组件中使用 backstack 打开不同层次结构中的片段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native 中使 Tab.Navigation Screens 默认背景为白色?

Android Navigation 组件在图表之间导航

踩坑!Android Jetpack组件间库之Navigation

Android Jetpack导航组件——Navigation的使用

在 Android Navigation 组件中使用 backstack 打开不同层次结构中的片段

Android日志—Navigation