2013-03-15 15 views
6

Mam dwie czynności: MainActivity i NextActivity. Od MainActivity mogę przejść do NextActivity, a następnie użyć Intent, aby wrócić do MainActivity. Ale wtedy OnCreate i inne rzeczy będą wywoływane i będzie tak, jakby wszystko zostało ponownie zainicjowane. Chcę wrócić do stanu tak, jak było zanim wszedłem do NextActivity.Android wróć do poprzedniej aktywności

Uświadomiłem sobie, że jeśli użyję fizycznego przycisku wstecz w moim telefonie, zostanie to dokładnie osiągnięte.

Jak wrócić do działania, tak jak przycisk Wstecz?

PS. Przetestowałem finish(), ale nie pomogłem.

+3

czy naprawdę skończyłeś test? w jaki sposób? to sposób na wykonanie – lelloman

+2

finish(). Co to znaczy, że to nie pomogło? Może skończy Ci się pamięć, a Android musi odbudować swoją aktywność? – Zielony

+0

Nie sądzę, że istnieje jakakolwiek gwarancja, że ​​poprzednia aktywność będzie nadal dostępna. Lepiej oszczędzaj stan za pomocą preferencji lub jakiegoś magazynu, jeśli aktywność została zebrana. – Davos555

Odpowiedz

25

można po prostu zadzwonić onBackPressed() zamiast stosowania Intent wrócić do MainActivity ..

Na przykład:

public void onClick() { 
    onBackPressed(); 
} 

Uwaga: finish() powinni robić dokładnie to, co chcesz ..

+0

to odpowiedź @ Jonas –

4

Zakładamy masz dwie Aktywności A i B. Nawigujesz od A do B. A przechodzi do tła.

B jest kładziony z tyłu, a B skupia się na nim. Po kliknięciu przycisku Wstecz aktywność B wyskakuje z tylnego stosu. Aktywność A zostaje wznowiona.

Uwaga: Wiele zadań można wykonać jednocześnie w tle. Jeśli jednak użytkownik wykonuje jednocześnie wiele zadań w tle, system może rozpocząć niszczenie działań w tle w celu odzyskania pamięci, co spowoduje utratę stanów aktywności. Zobacz następującą sekcję o stanie aktywności.

http://developer.android.com/training/basics/activity-lifecycle/starting.html. Aktywność po zniszczeniu musi zostać odtworzona. Aktywność jest niszczona i odtwarzana po zmianie orientacji ekranu.

http://developer.android.com/training/basics/activity-lifecycle/starting.html.

http://developer.android.com/guide/components/tasks-and-back-stack.html. Powinieneś rzucić okiem na sposób działania stosu wstecznego.

W twoim przypadku wykończenie powinno zadziałać (naciskając przycisk powrotu).

Uwaga: System wywołuje funkcjęDestroy() po wywołaniu funkcji onPause() i onStop() we wszystkich sytuacjach oprócz jednego: po wywołaniu metody finish() z metody onCreate().

Załóżmy, że masz trzecią aktywność C i chcesz przejść do działania A.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_BACK) { 
    onBackPressed(); 

} 

return super.onKeyDown(keyCode, event); 
} 

public void onBackPressed() { 
Intent myIntent = new Intent(ActivityC.this, MainActivity.class); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// clear back stack 
startActivity(myIntent); 
finish(); 
return; 
} 
Powiązane problemy