问题描述
我的 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
方法后,我的问题解决了。