Ich habe eine Anwendung, die diesen Übergang hat:
%Vor% Bei der Eingabe von C
muss ich eine Flagge überprüfen. Dann muss ich es als Absicht übergeben (sagen wir intentX = false
) zu D
. Nachdem Sie etwas in D
gemacht haben, wird es nach dem Drücken einer Taste wieder zu C
zurückkehren.
Was ich getan habe, war einfach wieder die intentX
mit dem Wert true, dann startActivity C wieder.
Was also passiert ist, dass es eine andere Aktivität C erstellt hat.
Was ich möchte, ist, dass ich keine neue Aktivität C starten muss, sondern das vorherige C verwenden muss, indem ich einfach super.onBackPressed()
aufruft. Aber ich kann den neuen Wert von intentX
nicht übergeben. Gibt es einen anderen Weg, um zu erreichen, was ich will. Ich könnte etwas verpasst haben.
Was Sie wollen, ist startActivityForResult()
. Wenn Sie von C
zu D
wechseln, verwenden Sie statt startActivity()
stattdessen startActivityForResult()
. Wenn Sie dann von D
zu C
zurückkehren möchten, verwenden Sie setResult()
, das ein Intent
-Objekt mit extras
enthalten kann, um an C
zurückzukehren.
Ich empfehle das nicht in onBackPressed()
, wenn Sie nicht haben, da dies nicht das ist, was der Benutzer erwartet. Stattdessen sollten Sie mit diesen Daten mit einem Ereignis wie Button
click zurückkehren.
Also, in C
wirst du sowas wie
dann in D
, wenn Sie bereit sind zurückzukehren
Wenn Sie dann zu C
zurückkehren, geben Sie diese Methode ein ( aus den Google Docs )
In einigen Fällen wird startActivityForResult nicht wirklich benötigt oder es ist nicht praktisch, alle startActivity-Aufrufe für startActivityForResult zu ändern.
Wenn der einfache Fall, dass Sie eine vorherige Aktivität einfach 'noch einmal' starten müssen, ist meine Empfehlung: Verwenden Sie das Flag FLAG_ACTIVITY_CLEAR_TOP.
Zitieren Sie eine kurze Beschreibung :
Wenn gesetzt, und die gestartete Aktivität läuft bereits in der aktuelle Aufgabe, dann statt eine neue Instanz davon zu starten Aktivität, alle anderen oben genannten Aktivitäten werden geschlossen und Diese Absicht wird an die (jetzt oben) alte Aktivität als neue Absicht.
Betrachten Sie zum Beispiel eine Aufgabe, bestehend aus den Aktivitäten: A, B, C, D. Wenn D startActivity () mit einer Intention aufruft, die in die Komponente der Aktivität B, dann C und D werden beendet und B erhalten der gegebene Intent, was dazu führt, dass der Stack jetzt: A, B ist.
Also dieses Beispiel
%Vor%Woher Sie diese neue Absicht erhalten, wird durch den Startmodus definiert und welche Flags wurden verwendet, um sie zu starten (in diesem Fall unsere AktivitätB).
Die aktuell laufende Instanz von Aktivität B im obigen Beispiel wird Entweder erhältst du die neue Absicht, die du hier beginnst onNewIntent () -Methode, oder wird selbst beendet und mit dem neuen neu gestartet Absicht. Wenn es seinen Startmodus als "mehrfach" deklariert hat (der Standard) und Sie haben FLAG_ACTIVITY_SINGLE_TOP nicht gleich gesetzt Absicht, dann wird es fertig und neu erstellt werden; für alle anderen starten Modi oder wenn FLAG_ACTIVITY_SINGLE_TOP gesetzt ist, dann wird diese Absicht sein an die aktuelle Instanz onNewIntent () geliefert.
Tags und Links android android-activity