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

问题描述 投票:6回答:2

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

Android Codelab for Navigation很好地描述了如何使用架构组件导航和BottomNavigationView。但是,假设我在BottomNavigationView,Tab1和Tab2中有2个选项卡。让我们说在Tab1中你可以浏览片段Frag1 - > Frag2。现在,每当我转到Tab2,然后回到Tab1时,Frag1,2的片段返回堆栈就会消失,并再次替换为起始点Frag1。

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

以前我使用ViewPager并管理后面的堆栈我已经完成了这项工作,但这并不像使用新导航的正确方法。

提前致谢!


编辑:

有一个更详细的答案here

android android-architecture-components bottomnavigationview android-navigation android-jetpack
2个回答
2
投票

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

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

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

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


0
投票

目前,新的导航架构不支持此功能。我对此感到非常沮丧,因为它是当今应用程序中的一个非常基本的功能,现在很多应用程序都在使用底部导航。如果你想关注它,有一个正在运行的线程。他们说他们会为此提出一个长期的解决方案,但是对于短期来说,他们会提供一个如何解决这个问题的样本。 https://issuetracker.google.com/issues/80029773#comment25

© www.soinside.com 2019 - 2024. All rights reserved.