Перезагрузить настройки в PreferenceActivity на резюме - PullRequest
9 голосов
/ 19 сентября 2011

В моем приложении некоторые настройки могут быть изменены, когда PreferenceActivity не открыт, и проблема, с которой я сталкиваюсь, заключается в том, что addPreferencesFromResource вызывается в onCreate, так что я открываю PreferenceActivity, затем перейдите к другому экрану оттуда, затем сделайте что-нибудь, что изменит настройки, затем нажмите клавишу «Назад», чтобы вернуться к PreferenceActivity, тогда некоторые настройки не изменились в макете.

Итак, как я могу перезагрузить все Preferences каждый раз, когда onResume (или onStart()) вызывается без дублирования макета?

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

edit: это решение будет работать только для API 11 +.

Я не уверен, что полностью понимаю вашу проблему, но вы могли бы добавить вызов метода restate () в onResume действия, которое, по моему мнению, снова проходит через весь жизненный цикл.

Чтобы убедиться, что вы делаете это только при наличии действительно грязных данных, я бы установил флаг в SharedPreferences, который сообщает вашей активности в onResume (), что она должна быть воссоздана.

    public void onResume(){
            super.onResume();
            SharedPreferences pref = getApplicationContext().getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE);
            if(pref.getBoolean("isDirtyPrefs", true))
                recreate();
        }
1 голос
/ 05 октября 2011

У меня была похожая проблема.Не найдя простого способа сделать само обновление PreferenceActivity, я решил добавить его в PreferenceActivity:

/**
 * Called when activity leaves the foreground
 */
protected void onStop() {
    super.onStop();
    finish();
}

Это приведет к перезагрузке экрана Prefs из SharedPreferences при следующем запуске.Излишне говорить, что этот подход не будет работать, если вы захотите вернуться к экрану своих предпочтений с помощью кнопки «Назад».

...