在 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]---> 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 Jetpack组件间库之Navigation
Android Jetpack导航组件——Navigation的使用