2010-03-17 13 views
7

In meiner Anwendung können Sie durch mehrere Aktivitäten navigieren, bis der Activity-Stack ziemlich tief ist.Schließen mehrerer Android-Aktivitäten gleichzeitig

Wir möchten eine Taste bei jeder Aktivität haben, die Sie direkt zum Hauptmenü zurückführt - d. H. Alle Aktivitäten vom Stapel außer dem ersten.

Ich habe den Button in einer Ansicht, die ich leicht auf jede Aktivität in der Anwendung setzen kann, aber ich kann nicht herausfinden, wie man mehrere Aktivitäten auf einen Schlag zu schließen.

(Wenn möglich, wäre es gut, wenn die View ausrechnen kann, wie viele Aktivitäten von selbst zu schließen -. Dh erkennen, wie tief auf dem Stapel seine eigene Aktivität ist)

Antwort

16

Werfen Sie einen Blick auf der Absicht Flagge FLAG_ACTIVITY_CLEAR_TOP, die besagt, dass es die zielgerichtete Aktivität an die Spitze des Stapels bringt und alles andere entfernt, was darüber gewesen sein könnte. Verwenden Sie also diese Schaltfläche, die Sie zu allen Ihren Aktivitäten hinzufügen können, um eine Absicht zu starten, die auf Ihr Hauptmenü ausgerichtet ist, wenn diese Flagge gesetzt ist.

Aus der Dokumentation:

Wenn gesetzt, und die Aktivität gestartet ist bereits in der aktuellen Aufgabe ausgeführt wird, dann statt eine neue Instanz dieser Aktivität starten, alle anderen Aktivitäten oben wird geschlossen und diese Absicht wird an die (jetzt oben) alte Aktivität als neue Absicht geliefert.

beispielsweise eine Aufgabe betrachten bestehend aus den Aktivitäten: A, B, C, D. Wenn D ruft startActivity() mit einer Absicht, dass Aktivitäts B zur Komponente löst, dann C und D sein fertig und B erhalten die Intent gegeben, in dem Stapel resultierende jetzt Wesen: A, B.

die aktuell laufende Instanz Aktivität B in dem obigen Beispiel wird entweder die neue Absicht erhalten Sie sind Start hier in seiner onNewIntent() Methode oder sein selbst beendet und mit der neuen Absicht neu gestartet. Wenn den Startmodus auf "multiple" (Standard) festgelegt hat und Sie haben FLAG_ACTIVITY_SINGLE_TOP in nicht die gleiche Absicht, dann wird es fertig und neu erstellt werden; für alle anderen Startmodi oder wenn FLAG_ACTIVITY_SINGLE_TOP gesetzt ist, dann wird diese Absicht an die aktuelle Instanz onNewIntent() geliefert werden.

Dieser Start-Modus kann auch mit FLAG_ACTIVITY_NEW_TASK zu gute Wirkung in Verbindung verwendet werden: verwendet, wenn auf die Wurzelaktivität einer Aufgabe beginnen, es werden alle laufenden Instanz dieser Aufgabe an den Vordergrund bringen, und löschen Sie es dann zu seinem Stammzustand. Dies ist besonders nützlich, zum Beispiel beim Starten einer Aktivität aus der Benachrichtigung Manager.

+0

Ich will - ich will nur sicher sein, dass es absolut richtig ist: Ich wurde schon davor gestochen ... – teedyay

+1

In der Tat - das hatte den gewünschten Effekt für mich: intent.SetFlags (ActivityFlags.ClearTop | ActivityFlags.SingleTop); – scolestock

-1

könnten Sie die erste Aktivität erklären android:launchMode="singleTask" (more) und dann einfach mit einer Absicht starten.

BEARBEITEN: Mein Vorschlag basiert auf der Annahme, dass eine einzelne Instanz der Aktivität zurückgegeben werden soll. Sonst ist es falsch.

+1

Die Verwendung von singleTask weist darauf hin, dass man nicht versteht, was singleTask tut ... das ist in Ordnung, es ist verwirrend und es hat viele Auswirkungen auf das Verhalten der Aktivität. Also, wenn Sie nicht alles verstehen und wollen, was es Ihnen antut, vermeiden Sie es bitte. 99% der Apps müssen nur den normalen oder manchmal den SingleTop-Startmodus verwenden. – hackbod

Verwandte Themen