2014-02-06 5 views
0

Я хотел создать ListPreference, который при изменении будет также перезагружать значения других объектов ListPreference. Я попытался это сделать, позвонив по телефону:Зависимости SharedPreferences

if(key.equals("important_pref")) { 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putString("some_pref", "some_val"); 
    editor.apply(); 
} 

in onSharedPreferenceChanged функция.

Это делает работу, но мне нужно перезагрузить экран настроек, чтобы увидеть efect. Есть ли способ избежать этого и перезагрузить значения мгновенно?

Я предполагаю, что я не могу так поступать, потому что первая фиксация должна быть закончена, прежде чем менять что-то другое.

ответ

0

Это очень распространенное требование, которое не выполнено, я боюсь. Вам либо нужно перезагрузить экран хаками, как setPreferencesScreen(null);, либо (лучше) зарегистрировать прослушиватель SharedPreferencesChanged и обновить prefs вручную. См. Так: update preferences values after changing them programatically

В вашем случае вы должны добавить, если в существующем SharedPreferencesChanged слушателе добавляются предложения, чтобы «услышать» изменение в предпочтении "some_pref" и обновить отображаемое значение вручную.