【问题标题】:How do I not reset my fragments when configuration changes happen?发生配置更改时如何不重置我的片段?
【发布时间】:2021-09-28 20:09:15
【问题描述】:
所以我有一个为我创建 4 个片段的活动,它们是一个底部导航栏。
当我更改为深色模式或浅色模式时,片段会重置并带我回到“主片段”,该片段基本上位于底部导航栏中。
所以我的问题是如何在更改 UI 模式时留在我所在的选项卡中?当然也改变了片段的 UI 模式
【问题讨论】:
标签:
java
android
android-fragments
android-fragmentactivity
android-configchanges
【解决方案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