2012-01-03 2 views
3

У меня есть опция Restore default settings в моем PreferenceActivity. После изменения настроек я вызываю onContentChanged(). Но почему-то визуальное состояние моего CheckboxPreference не обновляется.CheckboxPreference состояние не изменяется при вызове onContentChanged

Единственный способ решения проблемы, если найденное обновить состояние вручную:

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

Чтобы изменить общее значение приоритета, не используя пользовательский интерфейс (т.е. PreferenceScreen) использовать android.content.SharedPreferences.Editor:

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

Измененное значение будет отражено при открытии экрана настроек без дальнейшего уведомление.

+2

Но, насколько мне известно, это не будет обновлять состояние CheckboxPreferences, если PreferenceActivity уже виден. – tidbeck

 Смежные вопросы

  • Нет связанных вопросов^_^