繁体   English   中英

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

[英]CheckboxPreference state is not changed when calling onContentChanged

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

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

您必须注册OnSharedPreferenceChangeListener()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));
    }
}

要在不使用UI(即PreferenceScreen)的情况下更改共享首选项值,请使用android.content.SharedPreferences.Editor:

final Editor editor = prefs.edit();
editor.putBoolean("auto_start", true);
editor.commit();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM