安卓导航组件导航到子图



我有两个片段(OverviewFragment、PersonalFragment(和一个子图(包含两个片段:BucketsFragment和ObjectsFragment,BucketsFragment是开始目的地(。它们绑定到一个 BottomNavigateView。

现在,导航到子图开始目的地(BucketsFragment(后,继续导航到ObjectsFragment。然后导航到概述片段,最后返回到子图。

现在,我来到了开始目的地(BucketsFragment(,但实际上我想要的是ObjectsFragment。 我该怎么办?

整个过程显示在这里

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

根据底部导航的材料设计指南:

在 Android 上:应用导航到目的地的顶级屏幕。将重置任何以前的用户交互和临时屏幕状态,例如滚动位置、选项卡选择和内联搜索。

因此,从技术上讲,这种行为是意料之中的。

当您在"资源"选项卡上并转到"对象片段"时,后退堆栈是

DashBoardFragment -> BucketsFragment -> ObjectsFragment

返回到"概述"选项卡时,后退堆栈将变为

DashBoardFragment

并且不会为不在后退堆栈上的片段保存任何状态。这就是为什么当您重新选择"资源"选项卡时,它会从头开始重新设置,然后返回到

DashBoardFragment -> BucketsFragment

支持多个后退堆栈存在一个现有问题,旨在支持单独保存每个选项卡的状态,从而允许您想要的行为。根据该问题,这需要对片段的工作方式进行重大更改(因为它们是保存片段状态的片段(以及集成到导航本身。

该问题指出了一种临时解决方法,在 NavigationAdvancedSample 中演示,其中每个选项卡都使用自己单独的导航图和单独的NavHostFragment,从而允许每个选项卡彼此独立地保持自己的状态。这需要稍微不同的 MainActivity 中的设置和一组导航扩展的帮助才能使其工作。

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

最新更新