android - 暗/亮模式重新创建应用程序后,SwitchCompats 检查不正确
问题描述
我的BottomSheetDialogFragment中有四个开关。当我将 DarkMode 设置为“开启”时,会重新创建应用程序。奇怪的是,即使之前是“关闭”,其他开关也变成了“打开”。(SharedPref 中的值为 'false' 但 Switch 显示为 'on')
创建对话框时,我使用此代码打开/关闭开关:
binding.autoPlaySwith.setOnCheckedChangeListener(null)
binding.autoPlaySwith.isChecked = getHawkBoolean(AUTO_PLAY_VIDEO) //read it from sharedPref
binding.autoPlaySwith.setOnCheckedChangeListener(this)
//same code for other switches
这段代码用于切换checkedChange事件(问题发生在DarkMode检查开/关):
override fun onCheckedChanged(view: CompoundButton, isChecked: Boolean) {
if (view.isPressed) {
when (view.id) {
binding.autoPlaySwith.id -> {
saveHawkBoolean(AUTO_PLAY_VIDEO, isChecked)
}
binding.themeSwith.id-> {
saveHawkBoolean(DARK_MODE, isChecked)
try {
if (isChecked) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}
} catch (ex: Exception) {
Log.d(TAG , ex.localizedMessage?:"exception occurred ")
}
}
}
}
}
在通过 DarkMode 开关重新创建应用程序之前我的控件:
以及之后的图像:
解决方案
从 sharedPref 读取值并设置开关的代码在onViewCreated
方法中。在我将该代码放入onResume
方法后,我的问题就解决了。
推荐阅读
- flutter - Flutter readAsBytesSync文件读取不完整以编码base64
- javascript - 如何在 APEX 20.1 的交互式网格中的选择列表中获取唯一值
- typescript - 多个本地策略在 PassportStrategy 中不起作用
- c - 此函数不返回正确的布尔值
- c# - 使用 Epson SDK 进行 xamarin android 收据打印的示例代码
- discord.js - Discord.js - 删除所有频道
- javascript - JavaScript 中的对象解构
- python - 循环遍历 pandas 数据框并应用 if esle 函数
- javascript - react native:有没有办法检测是否是第一次启动应用程序?
- python - 如何访问熊猫数据框中的变量?