Как обновить внутренние значения PreferenceActivity при изменении SharedPreferences - PullRequest
2 голосов
/ 29 июля 2011

Я использую предпочтение в PreferenceActivity для загрузки значений по умолчанию: при щелчке по этому конкретному предпочтению происходит что-то подобное:

private String mResetKeys = "key1,key2,key3";

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
SharedPreferences.Editor prefs_editor = prefs.edit();
for (String current_pref : mResetKeys.split(",")) {
    prefs_editor.remove(current_pref);
}
prefs_editor.commit();

Но после этого предпочтения, соответствующие SharedPreference которых были сброшены, по-прежнему показывают старыезначение - это, кажется, кешируется в настройках.Только когда я покидаю PreferenceActivity и снова открываю его, в настройках отображаются новые значения.

Как программно обновить PreferenceActivity?

Ответы [ 2 ]

1 голос
/ 28 августа 2012

У меня была похожая проблема.Вероятно, это не самое правильное исправление , но оно работало для моих целей.Сразу после выполнения коммитов я вызвал метод Activity.recreate();.

Действие будет перезапущено (onDestroy() / onCreate() / etc), но для моих целей все, что мне было нужно, - это специальная обработка одного предпочтения.,Я выслушал определенное предпочтение с OnPreferenceClickListener и сделал диалоговое окно с предупреждением с видом предупреждающего сообщения и возможностью изменить свое мнение.Если они действительно захотели изменить свое решение, я сделал коммит нового значения для действия предпочтения, а затем вызвал recreate(), чтобы обновить флажок.

Однако меня также интересуетспособ сделать это без воссоздания деятельности ...

0 голосов
/ 16 августа 2015

Обновление значения предпочтения без перезагрузки PreferenceActivity от http://liquidlabs.ca/2011/08/25/update-preference-value-without-reloading-preferenceactivity/

Вот как обновить значение общего предпочтения по умолчанию для целевого элемента (в данном случае EditTextPreference)

public class YourCustomPreference extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);
}

// some logic goes above, when you want to reset value and update EditTextPreference value
// For convenience, I am going to wrap two different task in different methods
private void resetPreferenceValue() {
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
    SharedPreferences.Editor prefEditor = sharedPref.edit(); // Get preference in editor mode
    prefEditor.putString("your_edit_text_pref_key", "DEFAULT-VALUE"); // set your default value here (could be empty as well)
    prefEditor.commit(); // finally save changes

    // Now we have updated shared preference value, but in activity it still hold the old value
    this.resetElementValue();
} 

private void resetElementValue() {
    // First get reference to edit-text view elements
    EditTextPreference myPrefText = (EditTextPreference) super.findPreference("your_edit_text_pref_key");

    // Now, manually update it's value to default/empty
    myPrefText.setText("DEFAULT-VALUE"); // Now, if you click on the item, you'll see the value you've just set here
}
}
...