2014-07-06 14 views
13

Für Android, 3 Aktivitäten annehmen, a1 a2 a3, mit ihrer Klickhierarchie, a1-> a2-> a3.Android, wie erkennt man, dass die Aktivität von einer anderen Aktivität zurück ist?

Meine Fragen ist in a2, wie man es von a3 durch Drücken der Zurück-Taste erkennen, statt von a1 eingeben?

+0

Sie meinen, wenn Sie die Zurück-Taste bei a2 drücken, wird es Sie an a3 übergeben? – DavidBalas

+0

Wenn Sie a2 von a1 aufrufen, fügen Sie ein Extra in der Absicht hinzu, um anzuzeigen, dass es sich um a1 handelt. Dieses Extra würde also nicht existieren, wenn a2 bei einem Backpress von a3 erreicht würde.Ich habe das nicht versucht, klingt aber theoretisch plausibel. – faizal

+0

Mögliche Duplikate von [Wie zu erkennen, wenn von Kind Aktivität zurückkam?] (Https://stackoverflow.com/questions/7982081/how-to-detect-if-came-back-from-child-activity) –

Antwort

6

onCreate werden nicht aufgerufen, wenn Sie zurück drücken.

Es gibt mehrere Möglichkeiten, aus denen Sie ableiten können, ob Sie diese Aktivität durch Drücken der Taste "Zurück" erreicht haben.

  1. ein boolean in oncreate Set, das auf onCreate sagt aufgerufen.

  2. Starten Sie die C-Aktivität durch den Aufruf startActivityForResult und wenn Sie von C onActivityResult zurückkehren wird aufgerufen.

+3

ich don Ich denke, man kann davon ausgehen, dass onCreate() im Falle eines Backpresss nie aufgerufen wird. Basierend auf den Dokumenten sieht es so aus, als würde onCreate im Falle eines Backpresss aufgerufen, wenn das System onDestroy() bei der vorherigen Aktivität aufgerufen hat, während es aufgrund niedriger Systemressourcen angehalten ist. Quelle: https://developer.android.com/reference/android/app/Activity.html – Deemoe

+0

Ich glaube, dass diese akzeptierte Antwort falsch ist (@ Deemoe's Kommentar ist richtig). – LarsH

+0

Ich stimme zu. Meine 2. Option würde funktionieren. Es kann jedoch einen besseren Weg geben, das Endziel zu erreichen, ohne zwischen Backpress und Neueinstieg zu unterscheiden. –

3

Geben Sie einen Schlüssel in die Absicht, wenn Sie Ihre Aktivität starten.

Intent intent = new Intent(getBaseContext(), A1Activity.class); 
    intent.putExtra("I_CAME_FROM", "a1"); 
    startActivity(intent) 

Und es geöffnet Aktivität lesen:

String flag = intent.getStringExtra("I_CAME_FROM"); 
    if(flag.equlas("a1")){ 
    //you came from a1 activity 
    } 

dies ermöglicht es Ihnen, zu verstehen, wo man herkommt.

+0

Dies ist eine gute Möglichkeit, dies ohne Verwendung von Flags auf App-Ebene oder startActivityForResult zu tun. Sie können auch die Funktion onBackPressed() in Ihrer Aktivität (a3) ​​außer Kraft setzen, um eine Absicht mit einer zusätzlichen Angabe zu senden. Intent.putExtra ("I_CAME_FROM", "BackButton"); und sende es an (a2). – Deemoe

3

können folgende Methoden

onCreate() verwenden, wenn die Aktivität zuerst erstellt wird (von A1 bis A2). Diese Methode wird nicht aufgerufen, wenn Sie durch Drücken der Zurück-Taste zurückkehren.

onRestart() Aktivität war im Hintergrund und kommt in dem Vordergrund (zurück Presse in a3)

+0

Ich frage mich, warum niemand außer dir in diesem und anderen Posts über die gleiche Frage 'OnRestart() 'vorschlagen. Es scheint ein selten beachtetes Lebenszyklus-Stadion zu sein. Aber das ist die einzige Methode, die definitiv einmal aufgerufen wird und erst nach dem Zurückgehen. – Opiatefuchs

+0

Keine dieser Methoden ist korrekt. 'onCreate()' kann aufgerufen werden, wenn der Benutzer die Zurück-Taste drückt, um zu der Aktivität von seinem Kind zurückzukehren, nachdem der Prozess beendet wurde (beispielsweise hat der Benutzer möglicherweise die Kindaktivität aus der Aufgabenliste ausgewählt). 'onRestart()' wird aufgerufen, wenn Sie von überall auf die Aktivität zurückkehren, nicht nur durch Drücken der Zurück-Schaltfläche einer untergeordneten Aktivität. – LarsH

8

Sie onActivityResult verwenden können, für die Rückkehr von einer anderen Aktivität zu überprüfen. Setzen Sie diesen Code in Ihre a2 Aktivität ...

den Anforderungscode als Konstante deklarieren an der Spitze Ihrer Aktivität:

public static final int OPEN_NEW_ACTIVITY = 123456; 

diese setzen, wo Sie die neue Tätigkeit beginnen:

Intent intent = new Intent(this, NewActivity.class); 
startActivityForResult(intent, OPEN_NEW_ACTIVITY); 

Tun Sie etwas, wenn die Aktivität beendet ist. Die Dokumentation schlägt vor, dass Sie resultCode verwenden, aber je nach Situation kann Ihr Ergebnis entweder RESULT_OK oder RESULT_CANCELED sein, wenn die Schaltfläche gedrückt wird. Also würde ich es weglassen.

Aus irgendeinem Grund hatte ich Schwierigkeiten, wenn ich dies in ein Fragment legte. Sie müssen es also in die Aktivität einfügen.

Sie müssen eigentlich keinen Code in die a3-Aktivität einfügen, aber Sie können Daten zurück senden, wenn Sie möchten.

+0

Ich habe dies verwendet, um zu erkennen, wann ich von Einstellungsaktivitäten zurückkomme. – lenooh

Verwandte Themen