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 。
在应用程序中我该怎么做,以便即使BottomNavigationView
与Navigation一起使用时,即使我更改了制表符,也可以保持其后堆栈完整无缺?并且,还应使后退/向上按钮行为与准则保持同步。
以前,我是通过使用ViewPager
并管理自己的后背包来做到这一点的,但这并不适合使用新的Navigation导航。
谢谢!
编辑:
还有一个更详尽的答案here。
答案 0 :(得分:2)
主要原因是您仅使用一个NavHostFragment
来容纳应用程序的整个后备堆栈。
因此解决方案是每个选项卡都应拥有自己的后退堆栈。
FrameLayout
包裹每个标签片段。NavHostFragment
,并包含其自己的导航图,以使每个选项卡片段都具有自己的后向堆栈。BottomNavigationView.OnNavigationItemSelectedListener
上添加BottomNavigtionView
,以处理每个FrameLayout
的可见性。如果您不想将所有片段保留在内存中,则可以使用app:popUpTo
和app:popUpToInclusive="true"
弹出您不想保留的片段。
答案 1 :(得分:0)
新的导航体系结构当前不支持此功能。我对此也感到非常震惊,因为它是当今应用程序中非常基本的功能,并且很多应用程序现在都在使用底部导航。有一个正在运行的线程,如果您想关注它的话。他们说他们将为此提出一个长期的解决方案,但从短期来看,他们将提供有关如何解决此问题的示例。 https://issuetracker.google.com/issues/80029773#comment25