2012-10-24 12 views
6

Chcę wyczyścić backstack, gdy zacznę nowy zamiar działania.Jak wyczyścić backstack zadania i pozostawić tylko nowe działanie?

Dokładny przypadek mojego problemu jest następujący: Mam takie działania A> B> C> D> E "A" jest działaniem rejestracyjnym, a "B" jest potwierdzającym działaniem rejestracyjnym. Chcę, aby kiedy użytkownik rozpoczął aktywność "B", że nie może już powrócić do aktywności "A", także gdy użytkownik osiągnie aktywność "C", zarówno działanie "A" i "B" byłoby bezużyteczne, nie potrzebuję użytkownik z powrotem do nich już.

Również gdy użytkownik przejdzie do czynności "D" z "C", może powrócić do "C", ale jeśli przejdzie dalej do aktywności "E", nie może wrócić do żadnego z poprzednich "C" "lub" D ".

Po wielu badaniach, najlepszy mam jest użycie flagi: FLAG_ACTIVITY_NO_HISTORY, ale ma dwa problemy w moim przypadku:

  1. Przy aktywności „A”, jeżeli użytkownik poruszać się z dala od mojej aplikacji (na przykład na ekranie głównym), to niszczy tę aktywność, a zatem wszystkie informacje, które użytkownik wprowadził, są tracone!
  2. Aktywność "C" Chcę zachować ją w historii (backstack), jeśli użytkownik przechodzi do czynności "D", ale kiedy użytkownik przejdzie do działania "E", chcę go usunąć.

Nie mogę znaleźć rozwiązania dla tego problemu do tej pory, myślę, że byłoby łatwiej, gdyby było coś, aby usunąć backstack bieżącego zadania!

Moja minimalna pomoc techniczna SDK to 5.

Z góry dziękuję.

+2

Możliwe duplikaty: http://stackoverflow.com/questions/5794506/android-clear-the-back-stack Warto również sprawdzić: http://developer.android.com/guide/components/tasks-and-back-stack.html# Czyszczenie – jrajav

+0

Również podobne do http://stackoverflow.com/questions/7121700/remove-all-activities-od-back-back-while-calling-a-new-activity – speakingcode

Odpowiedz

8

Jeśli korzystasz z poziomu interfejsu API 11 lub wyższego, możesz po prostu dodać wartość FLAG_ACTIVITY_CLEAR_TASK zgodnie z własnym intencją, co spowoduje wyczyszczenie wszystkich innych czynności w zadaniu.

W przeciwnym razie może to pomóc: Clearing the full Android activity stack on older SDKs (that lack FLAG_ACTIVITY_CLEAR_TASK)

Innym rozwiązaniem byłoby, aby zakończyć działania nie są już potrzebne użytkownikowi, aby móc wrócić. Na przykład, jeśli wywołasz ActivityA.finish() przed przejściem do B, działanie zostanie usunięte z zadania.

Po uruchomieniu działalności B +, można go uruchomić za pomocą startActivityForResult() z C, a po zamknięciu D, wysłać wynik do C, a następnie zakończyć działalność C przed przejściem do E.

+0

Dziękuję bardzo za odpowiedź, złożyłem pierwszy podejście poprzez wywołanie funkcji "Zakończ()" w działaniu przed uruchomieniem drugiej, i działa świetnie. Ale dla drugiej części aktywność "C" rozpoczyna działanie "D", a aktywność "E" zostaje otwarta przez działanie "D", a nie "C". Czy mogę przekazać odwołanie do czynności "C" do działania "D", aby móc je zniszczyć przed rozpoczęciem działania "E"? – Elkfrawy

+1

Nie należy przekazywać referencji. Próbowałem powiedzieć, że można rozpocząć działanie "D" od "C" przy użyciu metody startActivityForResult(). Kiedy zdecydujesz się przejść do "E", ustaw wynik w aktywności "D", a następnie zakończ, co spowoduje wysłanie cię do "C", gdzie zweryfikujesz wynik, i przekierujesz użytkownika na "E", także kończąc aktywność "C".To trochę skomplikowane do wyjaśnienia, mam nadzieję, że je zdobędziesz. – kleinsenberg

+0

Ya, to było jasne, zastosowałem to i zadziałało, jak chcę. Bardzo dziękuję za Twoją pomoc – Elkfrawy

Powiązane problemy