切换片段时导航重置

Navigation resets when switching fragments

我在 BottomNavigationView 上有以下导航 xml,但是当用户在第一个片段内导航,然后使用 BottomNavigationView 导航到另一个片段,然后返回到初始片段,它一直重置为默认的第一个片段导航到更深的片段不会持续存在,我认为这是因为片段被重新创建并且从我在其他问题上看到的是有一种方法保存数据以重新设置文本字段或类似内容上的任何文本值,但是我还没有看到是否有办法避免片段被破坏和重新创建以进行导航和用户的任何更改以前对视图进行了保留。

有没有办法做到这一点,或者我应该使用 savedInstance 重新导航到之前导航过的片段吗?

Navigation 2.4.0 is support for multiple back stacks 的一部分 - 即底部导航栏的每个选项卡能够保存其状态,并在您重新选择该选项卡时恢复该状态。

根据该博客 post:

If you’re using NavigationUI, our set of opinionated helpers for connecting your NavController to Material view components, you’ll find that multiple back stacks is enabled by default for menu items, BottomNavigationView (and now NavigationRailView!), and NavigationView. This means that the common combination of using navigation-fragment and navigation-ui will just work.

这意味着如果您正在使用 setupWithNavController 方法,那么升级到 Navigation 2.4 将立即支持多个返回堆栈。您可以通过转到您的订单片段(从而在第一个选项卡上构建返回堆栈),转到另一个选项卡,然后再次点击第一个选项卡以重新选择它来验证这一点。

当然,保存和恢复的是你的片段状态,而不是实例本身。这意味着每个单独的片段仍然必须 save its state 正确。