Android导航组件导航到子图

时间:2020-05-17 04:44:04

标签: android android-jetpack android-jetpack-navigation

我有两个Fragment(OverviewFragment,PersonalFragment)和一个子图(包含两个Fragment:BucketsFragment和ObjectsFragment,BucketsFragment是开始目标)。它们绑定到一个BottomNavigateView。

现在,导航到子图的起始位置(BucketsFragment),然后继续导航至ObjectsFragment。然后导航到OverviewFragment,最后返回到子图。

现在,我来启动destination(BucketsFragment),但实际上我想要的是ObjectsFragment。我该怎么办?

The whole process is shown here

我想导航到保留先前状态的子图,而不是新的子图。

1 个答案:

答案 0 :(得分:0)

根据material design guidelines for bottom navigation

在Android上:该应用导航到目标的顶级屏幕。任何先前的用户交互和临时屏幕状态都将重置,例如滚动位置,选项卡选择和嵌入式搜索。

从技术上讲,这种行为是预期的。

当您在“资源”选项卡上并转到ObjectsFragment时,后堆栈为

DashBoardFragment -> BucketsFragment -> ObjectsFragment

当您返回到“概述”标签时,后退堆栈变为

DashBoardFragment

对于不在后堆栈上的Fragment,不会保存任何状态。这就是为什么当您重新选择“资源”选项卡时,它会从头开始重新创建,然后返回到

DashBoardFragment -> BucketsFragment

有一个existing issue for supporting multiple back stacks,旨在提供支持以分别保存每个选项卡的状态,从而实现您希望的行为。对于该问题,这需要对Fragments的工作方式进行重大更改(因为它们是保存Fragments状态的代码),并且需要集成到Navigation本身。

该问题指出了一种临时解决方法,如NavigationAdvancedSample所示,其中每个选项卡使用其自己的单独导航图和单独的NavHostFragment,从而使每个选项卡彼此独立地保持自己的状态。这需要a bit different of a setup in the MainActivity和一组NavigationExtensions的帮助才能起作用。

预计在完成多个后向堆栈工作后,所有这些功能都将被折叠到导航库本身中。