Mam główne działanie, które po kliknięciu przycisku rozpoczyna nowe działanie, wykorzystałem do tego następujący kod:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
Powyższy kod został uruchomiony z głównego działania.
Teraz w moim nowym działaniu, które jest wywoływane przez działanie główne, mam przycisk Wstecz. Kiedy kliknę ten przycisk Wstecz, chcę, aby moje nowe działanie zostało zamknięte i musi powrócić do pierwotnego głównego działania.
Próbowałem dzwonić super.finish()
i po prostu finish()
(z nowej aktywności), ale to zamyka całą moją aplikację (w tym moją główną aktywność).
Jak mogę po prostu zamknąć czynność, która jest aktualnie aktywna, a następnie powrócić do czynności głównej?
EDYTOWANE
Fakt, że przycisk Wstecz w telefonie zamyka również całą moją aplikację, prowadzi mnie do wniosku, że drugą czynność uruchomiłem nieprawidłowo?
OK, szukałem,
Utworzyłem działanie związane z ustawieniami, które używa tego samego kodu manifestu i tego samego kodu do uruchomienia działania.
W przypadku ustawień Aktywność, kiedy naciskam przycisk Wstecz, powraca do działania głównego.
Dzięki aktywności wspomnianej powyżej w głównym pytaniu po prostu zamyka całą moją aplikację.
Tak więc problem nie dotyczy kodu kończącego działanie, ale samego działania.
źródło
Odpowiedzi:
Myślę, że wywołujesz
finish()
metodęMainActivity
przed rozpoczęciemSettingsActivity
.Scenariusz, który opisałeś, nastąpi na dwa sposoby:
ZARÓWNO
Ustawiono
android:noHistory = "true"
doMainActivity
wewnątrzAndroidManifest.xml
, co powodujeMainActivity
sięfinish
automatycznie po naciśnięciu przycisku Wstecz.LUB
Przed przełączeniem się do „SettingsActivity” wywołałeś
finish()
swójMainActivity
, co go zabija. Po naciśnięciu przycisku Wstecz, ponieważ żadna inna czynność nie jest ustawiona na stosie, wraca do ekranu głównego.źródło
Możesz wrócić do poprzedniej czynności, wywołując po prostu finish () w bieżącej aktywności. Zwróć uwagę, że zostanie uruchomiony dowolny kod po wywołaniu finish () - możesz po prostu wykonać powrót po wywołaniu finish (), aby to naprawić.
Jeśli chcesz przywrócić wyniki do działania pierwszego, rozpoczynając działanie drugie, potrzebujesz:
Wewnątrz wywoływanej aktywności możesz następnie pobrać intencję z parametru onCreate () lub użyć
Aby ustawić zwracanie wyniku do działania pierwszego, wykonaj w ćwiczeniu drugim
Jeśli nie masz zamiaru wracać, po prostu powiedz
Jeśli działanie ma złe wyniki, możesz użyć Activity.RESULT_CANCELED (jest to używane domyślnie). Następnie wykonujesz pierwsze ćwiczenie
Aby zakończyć czynność drugą, użyj tych samych metod z finish (), jak opisano powyżej, z już ustawionymi wynikami.
źródło
Po kliknięciu przycisku możesz wywołać:
źródło
jeśli używasz fragmentu, którego powinieneś użyć
jeśli wykonujesz pojedyncze zajęcia, możesz użyć
źródło
wypróbuj ten kod zamiast
finish
:onBackPressed();
źródło
Utrudniasz to zbytnio. Jeśli rozumiem, co próbujesz zrobić poprawnie, wbudowany przycisk „wstecz” i sam Android wykonają całą pracę za Ciebie: http://developer.android.com/guide/components/tasks-and-back- stack.html
Ponadto zaimplementowanie niestandardowego przycisku „Wstecz” narusza podstawowe wytyczne dotyczące jakości aplikacji UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html
źródło
źródło
To zamyka całą aplikację:
źródło
Uważam, że Twoje drugie zajęcie prawdopodobnie nie jest powiązane z Twoim głównym zajęciem jako działalnością dziecka. Sprawdź swój
AndroidManifest.xml
plik i zobacz, czy<activity>
wpis dotyczący działania dziecka zawieraandroid:parentActivityName
atrybut. Powinien wyglądać mniej więcej tak:źródło
Po prostu nie wzywaj
finish()
swojego,MainActivity
a to eliminuje potrzebę Zastąpienia swojegoonBackPressed()
w swoim,SecondActivity
chyba że robisz inne rzeczy w tej funkcji. Jeśli czujesz się na „potrzebę” tego przycisku wtedy można po prostu zadzwonićfinish()
naSecondActivity
i że weźmie cię doMainActivity
tak długo, jak nie nazwalifinish()
na nimźródło
Activity
było poprzednie, lub zawsze wracaj doMainActivity
? Ponadto, jeśli zabraknie Ci pamięciBitmaps
, przeczytaj tę część Dokumentów . Pomogło mi toNie wiem, czy jest to w ogóle przydatne, czy nie, ale walczyłem z tym samym problemem i znalazłem dość łatwy sposób, z tylko globalną zmienną boolowską i akcją onResume (). W moim przypadku moje działanie C, jeśli zostanie kliknięte w określony przycisk, powinno wywołać zakończenie () działania B!
Activity_A -> Activity_B -> Activity_C
Activity_A (otwiera się normalnie Activity_B)
Activity_B (kliknięcie jakiegoś przycisku otwiera Activity_C):
Tak więc za każdym razem, gdy kliknę przycisk w działaniu C, spowoduje to wykonanie funkcji „onResume ()” w działaniu B i wróci do działania A.
źródło
Wypróbuj to działa zarówno na przycisku Wstecz na pasku narzędzi, jak i na sprzęcie .
źródło
android:parentActivityName=".MainActivity"
drugim. Ten kod obsługuje ten przycisk Home / Back w pasku narzędzi i po prostu kończy bieżącą czynność, powracając do poprzedniej w stosie. Dzięki.Finish zamyka całą aplikację, jest to coś, czego nienawidzę w programowaniu na Androida, a nie kończę, to jest w porządku, ale nie nadążają za dobrą składnią
Dlaczego nie
źródło
Napotkaliśmy bardzo podobną sytuację.
Nieprawidłowa odpowiedź „na odwrocie przycisku”
Sprawdziłem wszystkie odpowiedzi zamieszczone powyżej i żadna z nich nie zadziałała. Składnia Java do przejścia między działaniem 2 i działaniem 3 została sprawdzona pod kątem poprawności.
Nowość od kodowania przy wywoływaniu aplikacji innej firmy. przez działanie. Postanowiliśmy zbadać kąt konfiguracji - ostatecznie umożliwiając nam zidentyfikowanie pierwotnej przyczyny problemu.
Zakres : Konfiguracja działania 2 (rozmówca).
Podstawowa przyczyna :
Rozwiązanie :
Najwyraźniej w tym wydaniu „on back press” singleInstance traktuje wywołane działania w jednej instancji z wywołującym Activity, podczas gdy singleTask pozwoli wywoływanym działaniom mającym swoją własną tożsamość na tyle, aby zamierzone na back pressie działały tak, jak powinny.
źródło
Wypróbuj tę metodę ...
źródło
możliwe, że wywołujesz finish (); w zdarzeniu przycisku kliknięcia, więc główna czynność jest zamykana zaraz po kliknięciu przycisku, a gdy wracasz z następnej czynności, aplikacja jest zamykana, ponieważ główna czynność jest już zamknięta i nie ma aktywnej aktywności.
źródło
na metodzie onCreate swojego działania napisz następujący kod.
Następnie zastąp wybraną metodę onOptionsItem swojego działania w następujący sposób
I jesteś gotowy.
źródło
Musisz użyć tego w swojej MainActivity
Flaga uruchomi wiele zadań, które zachowają twoją MainActivity, gdy wywołasz zakończ, zabije inne działanie i przeniesie cię z powrotem do MainActivity
źródło