首页 > 解决方案 > 带有BottomNavigationView的Android Jetpack Navigation正确返回堆栈

问题描述

OBS:虽然仍然没有一流的支持(截至撰写本文时),但谷歌现在已经更新了他们的示例,并附上了他们认为应该如何解决的示例:https ://github.com/googlesamples/android-architecture-components/tree /master/NavigationAdvancedSample

Android Codelab for Navigation很好地描述了如何将架构组件 Navigation与BottomNavigationView. 但是假设我在Tab1Tab2BottomNavigationView中有 2 个标签。假设您在Tab1中浏览Frag1 --> Frag2片段。现在,每当我去Tab2,然后回到Tab1 , Frag1,2的片段返回堆栈就消失了,并再次替换为起点Frag1

我必须在应用程序中做什么,以便即使我更改选项卡BottomNavigationView,与Navigation一起保持其后堆栈完整?并且,还保持备份/向上按钮的行为与指南同步。

以前我通过使用ViewPager和管理我的 selfe 的后台堆栈来完成此操作,但这感觉不像新导航的正确方法。

提前致谢!


编辑:

这里有更详细的答案。

标签: androidandroid-architecture-componentsbottomnavigationviewandroid-navigationandroid-jetpack

解决方案


主要原因是您只使用一个NavHostFragment来保存应用程序的整个后台堆栈。

所以解决方案是每个选项卡都应该拥有自己的后台堆栈。

  • 在您的主布局中,用FrameLayout.
  • 每个选项卡片段都是一个NavHostFragment并包含自己的导航图,以使每个选项卡片段都有自己的后退堆栈。
  • 添加BottomNavigationView.OnNavigationItemSelectedListenertoBottomNavigtionView来处理每个FrameLayout.

如果您不想将所有片段保留在内存中,您可以使用app:popUpToandapp:popUpToInclusive="true"弹出您不想保留的片段。


推荐阅读