2012-01-03 71 views
3

我在我的PreferenceActivity中有一个Restore default settings选项。设置更改后,我致电onContentChanged()。但由于某种原因,我的CheckboxPreference的视觉状态没有更新。当调用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(); 

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

回答

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)); 
    } 
} 
0

更改共享偏爱值,而无需使用UI(即PreferenceScreen)使用android.content.SharedPreferences.Editor:

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

当打开偏好屏幕无需进一步更改后的数值将被反射通知。

+2

但据我了解,如果PreferenceActivity已经可见,这将不会更新CheckboxPreferences checked状态。 – tidbeck 2012-01-03 16:39:38

相关问题