5

Mam jedną główną aktywność i jedną preferencję. Podczas mojej pierwszej aktywności dzwonię do menu i przechodzę do preferencjiAktywność, wywołując funkcję startActivityForResult.Jak powrócić z ekranu preferencji do głównej aktywności?

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

Następnie zmieniam ustawienia i chcę wrócić do głównej aktywności i zobaczyć główne działanie z nowymi ustawieniami. W OnPause() Metoda nie następuje (jak prawo zrozumieć ta metoda zostanie wywołana po naciśnięciu przycisku z powrotem, prawda?)

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

Na główny

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"); 
      } 
     } 
    } 

ale mój acyncTask nie zadzwonił i logowanie nie jest drukowane. Jak właściwie mogę to zrobić? Dzięki!

Odpowiedz

12

Podczas mojej pierwszej działalności dzwonię do menu i przechodzę do preferencjiAktywność, wywołując funkcję startActivityForResult.

Używanie startActivityForResult() z PreferenceActivity jest dość nietypowe. PreferenceActivity jest przeznaczony do użytku z startActivity(). Jeśli ten, rozpoczynający PreferenceActivity, dba o zmiany preferencji, powinien zarejestrować detektor zmiany preferencji z obiektem SharedPreferences.

Następnie zmieniam ustawienia i chcę wrócić do głównej aktywności i zobaczyć główne działanie z nowymi ustawieniami.

Polecam zamiast tego użyć SharedPreferences.OnSharedPreferenceChangeListener. Lub po prostu ponownie przeczytaj preferencje, o które ci chodzi, w metodzie oryginalnej aktywności w postaci: onStart() lub onResume().

W OnPause() metoda ma następujące (jak prawo zrozumieć ta metoda zostanie wywołana po naciśnięciu przycisku z powrotem, prawda?)

Nie, to nie będzie działać. onPause() jest za późno, aby zadzwonić pod numer setResult().

+0

Dzięki. Spróbuję to zrobić. –

Powiązane problemy