我的 PreferenceActivity 中有一个恢复默认设置
选项.更改设置后,我调用 onContentChanged() .但出于某种原因,我的 CheckboxPreference 的视觉状态未更新。
唯一的解决方法是手动更新状态:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean autoStartValue = prefs.getBoolean("auto_start", true);
CheckBoxPreference autoStartPref = (CheckBoxPreference)findPreference("auto_start");
autoStartPref.setChecked(autoStartValue);
// Notify that the preferences changed
EditPreferencesActivity.this.onContentChanged();
正确的做法是什么?
最佳答案
您必须注册 OnSharedPreferenceChangeListener()
并自行更新您的偏好。
@Override
protected void onResume() {
super.onResume();
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onPause() {
super.onPause();
// Unregister the listener whenever a key changes
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Log.i(TAG, "o--> onSharedPreferenceChanged");
Preference p = findPreference(key);
if(p instanceof CheckBoxPreference){
CheckBoxPreference checkBoxPref = (CheckBoxPreference) p;
checkBoxPref.setChecked(prefs.getBoolean(key, true));
}
}
关于android - 调用 onContentChanged 时 CheckboxPreference 状态没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8710224/