Mam 2 działania: główną i listę.
Z Main możesz otworzyć List; z listy możesz otworzyć Main.
Chciałbym, żeby każde otwarcie Listy nie zostało zapisane w „historii”. Zatem naciśnięcie wstecz z menu głównego nie może wrócić do listy.
Czy to możliwe?
android
back-stack
realtebo
źródło
źródło
finish()
natychmiast postartActivity(...)
. W ten sposób, jeśli użytkownik naciśnie BACK z „main”, nie będzie do czego wracać.Odpowiedzi:
Rozpoczynając swoją listę
Activity
, ustaw jejIntent
flagi w następujący sposób:FLAG_ACTIVITY_NO_HISTORY
Flag utrzymuje nowaActivity
z dodawanych do historii stosie.Uwaga: jak wskazuje @Sam, możesz użyć
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
zamiast tego. Nie ma różnicy funkcjonalnej.źródło
Intent
flagi, która stwierdza, że „tylko dodaje do historii, jeśli nie powraca doActivity
początku”.setFlags()
zgetFlags()
zamiastIntent.addFlags()
?W pliku manifestu dodaj:
do czynności, której nie chcesz trzymać na stosie.
źródło
Użyj nowego zadania z czyszczeniem. To zadziałało w moim przypadku, gdy inne opcje nie.
Wyczyść cały stos historii i rozpocznij nową aktywność na Androidzie
źródło
Wygląda na to, że jeśli wywołasz finish () na swojej aktywności zaraz po otwarciu innej, ta, która jest zakończona, zostanie usunięta ze stosu.
na przykład:
źródło
W moim przypadku
FLAG_ACTIVITY_NO_HISTORY
nie zadziałało. Ani nie działały,FLAG_ACTIVITY_NEW_TASK
aniFLAG_ACTIVITY_CLEAR_TASK
same nie działały.Jednak
FLAG_ACTIVITY_NEW_TASK
iFLAG_ACTIVITY_CLEAR_TASK
razem wyszło.źródło
Późna odpowiedź, ale dodaje nieco głębi innym odpowiedziom. Wszystko sprowadza się do tego, co chcesz, aby stało się z innymi działaniami rozpoczętymi od tego działania
Opcja 1 - Tylko to jedno działanie nie powinno mieć historii połączeń
Następnie po prostu wykonaj:
Opcja 2 - Wszystkie działania rozpoczęte od tego konkretnego działania nie powinny mieć historii
Następnie dodaj manifest aktywności wywołującej:
Ale jeśli chcesz mieć historię w nowej aktywności, musisz ręcznie usunąć flagę:
Mam nadzieję, że to wyjaśnia inne odpowiedzi :)
źródło
Chciałem tylko dodać sposób, aby to zrobić w Kotlinie:
źródło
Intent(this, MainActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) }.also { startActivity(it) }
Wypróbuj FLAG_ACTIVITY_CLEAR_TOP, jeśli aktywność już trwa:
źródło
dodaj flagę
FLAG_ACTIVITY_NEW_TASK
do swojegoIntent
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
źródło
Czy nie możesz zastąpić przycisku Wstecz w konkretnym działaniu, aby zatrzymać funkcję „powrotu”?
źródło
Activity
nie jest dobrą praktyką.OnBackPressed
na to.