Dark/Light 模式重新创建应用后,SwitchCompats 检查不正确
SwitchCompats are checked incorrectly after Dark/Light Mode recreates the app
我的 BottomSheetDialogFragment 中有四个开关。当我设置 DarkMode 'On' 时,将重新创建该应用程序。奇怪的是,其他开关变成了 'On',即使那些之前是 'Off'。 (SharedPref 中的值为 'false' 但 Switch 显示 'on')
我使用此代码在创建对话框时进行切换on/off:
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 已检查 on/off):
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
方法后,我的问题就解决了。
我的 BottomSheetDialogFragment 中有四个开关。当我设置 DarkMode 'On' 时,将重新创建该应用程序。奇怪的是,其他开关变成了 'On',即使那些之前是 'Off'。 (SharedPref 中的值为 'false' 但 Switch 显示 'on')
我使用此代码在创建对话框时进行切换on/off:
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 已检查 on/off):
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
方法后,我的问题就解决了。