Próbuję ustawić wynik po naciśnięciu przycisku WSTECZ. Wzywam Destroy
Intent data = new Intent();
setResult(RESULT_OK, data)
Ale jeśli chodzi o
onActivityResult(int requestCode, int resultCode, Intent data)
resultCode to 0 (RESULT_CANCELED), a dane mają wartość „null”.
Jak więc mogę przekazać wynik z aktywności zakończonej przyciskiem WSTECZ?
Activity
wynik musi być ustawiony przedfinish()
wywołaniem. Kliknięcie WSTECZ faktycznie wywołujefinish()
Twójactivity
, więc możesz użyć następującego fragmentu:Jeśli nazywasz
NavUtils.navigateUpFromSameTask();
sięonOptionsItemSelected()
,finish()
nazywa, ale dostaniesz złymresult code
. Więc trzeba nazwaćfinish()
nienavigateUpFromSameTask
wonOptionsItemSelected()
. zły requestCode w onActivityResultźródło
finish
ma wspólnego zonPause
ionDestroy
? Te są całkowicie niezwiązane, z wyjątkiem tego, żefinish
rozpoczyna proces zakończenia, któryonPause
ionDestroy
jest częścią.Jeśli chcesz ustawić niestandardowe
RESULT_CODE
wonBackPressed
zdarzeniu, musisz najpierw ustawić,result
a następnie wywołać,super.onBackPressed()
a otrzymasz to samoRESULT_CODE
wonActivityResult
metodzie działania dzwoniącegoźródło
Zrefaktorowałem mój kod. Początkowo przygotowałem dane i ustawiłem jak
activity result
wonDestroy
(to nie zadziałało). Teraz ustawiamactivity
dane za każdym razem, gdy dane, które mają zostać zwrócone, są aktualizowane i nie mam w nich niconDestroy
.źródło
setResult()
, Twoje dane zostaną utracone.Należy nadpisać onOptionsItemSelected w następujący sposób:
źródło
Refer onActivityResult (int, int, Intent) doc
Rozwiązaniem jest sprawdzenie resultCode dla wartości Activity.RESULT_CENCELED . Jeśli tak, oznacza to, że naciśnięto przycisk BACK lub działanie się zawiesiło. Mam nadzieję, że to działa dla was, działa dla mnie :).
źródło
onDestroy
jest za późno w łańcuchu - zamiast tego zastąponPause
iisFinishing()
sprawdź, czy Twoja aktywność zbliża się do końca swojego cyklu życia.źródło
Spróbuj zastąpić onBackPressed (od poziomu Androida 5 w górę) lub przesłonić onKeyDown () i przechwycić KeyEvent.BUTTON_BACK (zobacz Wyniki aktywności Androida ) To załatwia sprawę .
źródło
Nie polegaj na żadnej logice wykonywanej w onPause jednej czynności, gdy powrócisz do pierwotnej. Według dokumentów:
Szczegółowe informacje można znaleźć pod adresem http://goo.gl/8S2Y .
Najbezpieczniejszym sposobem jest ustawienie wyniku po zakończeniu każdej operacji zmiany wyniku (jak wspomniałeś w swojej odpowiedzi)
źródło
wklejam odpowiedź może być pomocna dla innych osób: kiedy ustawię launcheMode z androidem: launchMode = "singleTask", również nie mogę uzyskać wyniku, dokument mówi:
i:
źródło