Android - Zurück zur vorherigen Aktivität mit unterschiedlichem Intent-Wert

8

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.

    
sftdev 14.08.2013, 22:40
quelle

2 Antworten

13

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

machen %Vor%

dann in D , wenn Sie bereit sind zurückzukehren

%Vor%

Wenn Sie dann zu C zurückkehren, geben Sie diese Methode ein ( aus den Google Docs )

%Vor%     
codeMagic 14.08.2013, 22:42
quelle
1

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.

    
DNax 09.09.2015 14:15
quelle

Tags und Links