我的PreferenceActivity中有Restore default settings
个选项。更改设置后,我致电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();
这样做的正确方法是什么?
答案 0 :(得分:1)
您必须注册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));
}
}
答案 1 :(得分:0)
要在不使用UI(即PreferenceScreen)的情况下更改共享首选项值,请使用android.content.SharedPreferences.Editor:
final Editor editor = prefs.edit();
editor.putBoolean("auto_start", true);
editor.commit();
当您在没有进一步通知的情况下打开首选项屏幕时,将反映更改的值。