Android Jetpack使用BottomNavigationView导航正确的后台堆栈

Alg*_*gar 9 android android-navigation bottomnavigationview android-architecture-components android-jetpack

Android的程式码实验室用于导航做得很好,说明如何用一起使用的架构组件导航BottomNavigationView.但是,假设我在2个标签BottomNavigationView,TAB1TAB2.让我们说在Tab1中你可以浏览片段Frag1 - > Frag2.现在,每当我去TAB2,然后回到TAB1,片段回栈Frag1,2走了,并与起点更换Frag1一次.

我在应用程序中需要做什么,以便即使我更改标签,BottomNavigationView导航一起保持其后堆栈完好无损?并且,还保持后退/上行按钮行为与指南同步.

以前我通过使用ViewPager和管理后台堆栈来完成这项任务,但这并不像使用新导航的正确方法.

提前致谢!


编辑:

还有一个更详尽的答案在这里.

jay*_*917 5

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

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

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

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