2012-01-03 50 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

相關問題