Как вернуться с экрана предпочтений к основному виду деятельности? - PullRequest
5 голосов
/ 14 октября 2010

У меня есть одно основное действие и одно предпочтение. При первой активности я вызываю меню и включаю preferenceActivity, вызывая startActivityForResult.

                case R.id.settings:
                startActivityForResult(new Intent(this, SettingsActivity.class), LAUNCH_SETTINGS);
                return true;

Затем я изменяю свои настройки и хочу вернуться к основному виду деятельности и увидеть основной вид деятельности с примененными новыми настройками. В методе onPause () выполните следующее (как я правильно понимаю, этот метод будет вызываться при нажатии кнопки назад, верно?)

   @Override
     protected void onPause() {
         super.onPause();
         setResult(RESULT_OK, new Intent(this, MainActivity.class));
         finish();
     }

По основной деятельности

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == LAUNCH_SETTINGS) {
            if (resultCode == RESULT_OK) {
                new RefreshList().execute(ACTION_SELECT);
                Log.d(TAG, "On activity result");
            }
        }
    }

Но мой acyncTask не вызывается и журнал не печатается. Как правильно я могу это сделать? Спасибо!

1 Ответ

12 голосов
/ 15 октября 2010

В моем первом действии я вызываю меню и перехожу на preferenceActivity, вызывая startActivityForResult.

Использование startActivityForResult() с PreferenceActivity довольно необычно. PreferenceActivity предназначен для использования с startActivity(). Если тот, кто запускает PreferenceActivity, заботится об изменениях предпочтений, он должен зарегистрировать прослушиватель изменений предпочтений с объектом SharedPreferences.

Затем я изменяю свои настройки и хочу вернуться к основному виду деятельности и увидеть основную активность с примененными новыми настройками.

Я рекомендую вместо этого использовать SharedPreferences.OnSharedPreferenceChangeListener. Или просто перечитайте предпочтения, которые вас интересуют, в методе onStart() или onResume() исходного действия.

В методе onPause () выполните следующие действия (насколько я понимаю, этот метод будет вызываться при нажатии кнопки назад, верно?)

Нет, это не сработает. onPause() слишком поздно, чтобы позвонить setResult().

...