android - 调用 onContentChanged 时 CheckboxPreference 状态没有改变

标签 android preferenceactivity

我的 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/

相关文章:

android - 如何将工具栏中的关闭按钮移至左侧

Android - 在不触发 sleep /锁定屏幕的情况下关闭显示 - 使用触摸屏打开

java - 排序列表查看搜索数据

android - 是否需要调用 PreferenceManager.setDefaultValues() 来清除首选项?

android - 将 PreferenceFragment 与多个首选项文件重用

android - 如何设置首选项标题的摘要

android - 响应 Android 中的偏好更新

java - Android 应用程序意外停止

android - 是否可以将 EditTextPreference 与 CheckBoxPreference 结合使用?

java - Android 中的 RTSP 流,带有用户名和密码