切换片段时导航重置

Posted

技术标签:

【中文标题】切换片段时导航重置【英文标题】:Navigation resets when switching fragments 【发布时间】:2021-12-14 18:31:53 【问题描述】:

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

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

【问题讨论】:

您使用的是什么版本的导航?您是否已经 saving your state 跨越配置更改和进程死亡和重新创建? @ianhanniballake 我正在使用这个版本的导航“navigation-fragment:2.3.5”来保存状态,我还不想先问,因为我不知道这是否能解决我的问题问题与否 【参考方案1】:

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

根据那篇博文:

如果您使用NavigationUI,我们将您的 NavController 连接到 Material 视图组件的一组自以为是的帮助程序,您会发现默认情况下为菜单项启用多个返回堆栈,BottomNavigationView(现在是@987654326 @!) 和 NavigationView。这意味着使用navigation-fragmentnavigation-ui 的常见组合将起作用。

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

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

【讨论】:

我明白了,我现在就去看看,是的,这就是我需要的,暂时不需要保存状态! 是的,更新到 2.4.0-beta01 版导航后立即工作,无需额外设置。

以上是关于切换片段时导航重置的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - 选项卡式活动如何将片段重置为默认视图?

返回前台时导航栏位置重置

每次选择标签栏项目时如何重置导航堆栈?

任何导航都未处理“导航/重置”操作

如何在更改相机权限后阻止iOS应用重置?

将部分和行添加到 UITableView 以重置表