![](/img/trans.png)
[英]How to turn list scrolling off when calling onContentChanged in Android ListActivity?
[英]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.