我的 Android 应用程序中有一个 PreferenceActivty,由于兼容性原因,我通过 getPreferenceScreen() 方法和我在代码中创建的一些 Preference 对象使用它,主要是 CheckBoxPreference 和 SwitchPreference。
直到我的应用程序的以前版本,总共有 8 个首选项,一切正常,但现在我又添加了 2 个首选项,我遇到了一个非常奇怪的问题。
屏幕上的第二个首选项是 SwitchPreference。当我打开活动时,它被选中。如果我向下滚动屏幕而不实际更改任何内容,它的值会突然自动设置为 OFF。我尝试将 OnChangeListener 添加到 Preference 并实现 OnSharedPreferenceChangeListener,但结果是相同的:一旦特定的 Preference 从屏幕上消失,它就会关闭。如果它设置为 OFF,它将保持其值并且不会调用更改侦听器。
有谁知道为什么会发生这种情况?我完全迷路了……
提前致谢!
我的偏好代码基本上是这样的,在 onCreate 方法上针对 5 种不同的设置重复 5 次:
controlWifiPreference = new CheckBoxPreference(this);
controlWifiPreference.setKey(Constants.PREF_1_KEY);
getPreferenceScreen().addPreference(controlWifiPreference);
wifiPreference = new SwitchPreference(this);
wifiPreference.setKey(Constants.PREF_2_KEY);
getPreferenceScreen().addPreference(wifiPreference);
由于首选项位于 TabActivity 中,因此在 onResume 方法上,我为每个首选项调用 setChecked() 以再次设置其值,尽管我不确定它是否完全必要。
最后,我有一个 onSharedPreferenceChanged 方法,可以在单击其他人时激活/停用首选项,因为我无法让 setDependency 方法工作。是这样的(再次重复五次):
if (key.equals(controlWifiPreference.getKey())) {
wifiPreference.setEnabled(controlWifiPreference.isChecked());
}