具有BottomNavigationView的Android Jetpack Navigation正确的后置堆栈

时间:2018-09-02 18:45:05

标签: android android-architecture-components bottomnavigationview android-navigation android-jetpack

OBS:尽管仍然没有一流的支持(在撰写本文时),但Google现在用示例说明了他们应如何解决的示例:https://github.com/googlesamples/android-architecture-components/tree/master/NavigationAdvancedSample

Android Codelab for Navigation很好地描述了如何与BottomNavigationView一起使用架构组件Navigation。但是,假设我在BottomNavigationView中有2个标签,分别是 Tab1 Tab2 。假设您在 Tab1 中浏览了片段 Frag1 -> Frag2 。现在,每当我转到 Tab2 ,然后回到 Tab1 时, Frag1,2 的片段回栈都消失了,并替换为起点 Frag1

在应用程序中我该怎么做,以便即使BottomNavigationViewNavigation一起使用时,即使我更改了制表符,也可以保持其后堆栈完整无缺?并且,还应使后退/向上按钮行为与准则保持同步。

以前,我是通过使用ViewPager并管理自己的后背包来做到这一点的,但这并不适合使用新的Navigation导航。

谢谢!


编辑:

还有一个更详尽的答案here

2 个答案:

答案 0 :(得分:2)

主要原因是您仅使用一个NavHostFragment来容纳应用程序的整个后备堆栈。

因此解决方案是每个选项卡都应拥有自己的后退堆栈。

  • 在主布局中,用FrameLayout包裹每个标签片段。
  • 每个选项卡片段都是NavHostFragment,并包含其自己的导航图,以使每个选项卡片段都具有自己的后向堆栈。
  • BottomNavigationView.OnNavigationItemSelectedListener上添加BottomNavigtionView,以处理每个FrameLayout的可见性。

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

答案 1 :(得分:0)

新的导航体系结构当前不支持此功能。我对此也感到非常震惊,因为它是当今应用程序中非常基本的功能,并且很多应用程序现在都在使用底部导航。有一个正在运行的线程,如果您想关注它的话。他们说他们将为此提出一个长期的解决方案,但从短期来看,他们将提供有关如何解决此问题的示例。 https://issuetracker.google.com/issues/80029773#comment25