调用onContentChanged时,不会更改CheckboxPreference状态

时间:2012-01-03 09:36:37

标签: android preferenceactivity

我的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();

这样做的正确方法是什么?

2 个答案:

答案 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();

当您在没有进一步通知的情况下打开首选项屏幕时,将反映更改的值。