发生配置更改时如何不重置我的片段?

Posted

技术标签:

【中文标题】发生配置更改时如何不重置我的片段?【英文标题】:How do I not reset my fragments when configuration changes happen? 【发布时间】:2021-09-28 20:09:15 【问题描述】:

所以我有一个为我创建 4 个片段的活动,它们是一个底部导航栏。 当我更改为深色模式或浅色模式时,片段会重置并带我回到“主片段”,该片段基本上位于底部导航栏中。 所以我的问题是如何在更改 UI 模式时留在我所在的选项卡中?当然也改变了片段的 UI 模式

【问题讨论】:

【参考方案1】:

最好的方法是让 Activity 使用其片段重新创建自己,可能需要进行一些配置更改才能显示正确的 UI。并且您的用户总是有可能将您的应用程序移至后台,系统会在一段时间后将其杀死,然后当您的用户返回它时 - 您将回到您的娱乐问题。我说它是为了防止您在 androidmanifest 中使用 configChanges 之类的黑客,这些黑客会阻止 Activity 在配置更改事件时重新创建。

但回到重点: 当配置更改破坏您的 Activity 时,将在创建新的 Activity 实例时自动重新创建片段。但它取决于你来保存它的一些状态。我不确定您的 UI 和代码是什么样的。保存和恢复状态的最基本方法(如您问题中的活动选项卡)是使用: Activity.onSaveInstanceState(Bundle) / Activity.onCreate(savedInstanceState: Bundle?) 和 Fragment.onSaveInstanceState(Bundle)/Fragment.onCreate(savedInstanceState :捆绑?)机制。您将相关变量保存在 onSaveInstanceState 中的捆绑包中,稍后在 onCreate 中使用 savedInstanceState 变量恢复此状态,但前提是它不为 null - 这在第一次创建 Activity 时发生。

这是一个广泛的话题,您可以在此处找到更多信息:

https://developer.android.com/topic/libraries/architecture/saving-states https://developer.android.com/guide/fragments/saving-state

【讨论】:

感谢您澄清一切,非常感谢!

以上是关于发生配置更改时如何不重置我的片段?的主要内容,如果未能解决你的问题,请参考以下文章

将重置计数器(在列的值更改时重置)添加到视图中的 PLSQL 行

滚动时,Android Listview重置更改

SwiftUI List 在任何视图更改时重置滚动

重置密码且未配置两因素设备时如何获得两因素身份验证

如何在 laravel 中更改重置密码电子邮件主题?

在日期和时间更改时重置/取消警报时的 AlarmManager 错误