2013-03-12 9 views
23

ich, sagendie Aktivität fortsetzen statt, wenn der Start existiert bereits in zurück Stapel

Activity_2viele Schritte, um ein Activity_1 nach haben>Activity_3 .... in einigen Activity_n ich einige Daten ändern in Bezug auf Activity_1 und rufen Sie es mit

Intent intent = new Intent(Activity_n.this, Activity_1.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Um den Inhalt zu aktualisieren. Aber später kann ich den ganzen Weg zurück zu Activity_1 gehen, wo ich angefangen habe, die alte Daten hat.

Stattdessen möchte ich die ursprüngliche Activity_1 's onResume() aufgerufen werden, mit dem obigen Code. Oder angemessen Flag

FLAG_ACTIVITY_CLEAR_TOP

Betrachten wir eine Aufgabe der Aktivitäten, die aus: A, B, C, D. Wenn D aufruft startActivity(), mit der Absicht, die zu der Komponente löst der Aktivität B, dann C und D wird beendet, und B die angegebene Intent, die sich in dem Stapel nun sein erhalten: A, B.

das‘WHA t die Ärzte sagen, aber nicht, was ich bekomme.

Antwort

32

können Sie diese zwei Zeilen hinzufügen, und

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

schreiben diese in Ihrer Manifest-Datei in Aktivität

<activity 
    android:name=".SettingsActivity" 
    android:launchMode="singleInstance" 
    android:screenOrientation="portrait" > 
</activity> 

"singleTask" und "SingleInstance" Aktivitäten versuchen, kann nur eine Aufgabe beginnen. Sie sind immer die Wurzel des Aktivitätsstapels. Darüber hinaus kann das Gerät nur eine Instanz der Aktivität gleichzeitig speichern - nur eine solche Aufgabe.

können Sie verwenden SingleTask oder SingleInstance

„singleTask“ - Das System legt die Aktivität an der Wurzel einer neuen Aufgabe und leitet die Absicht zu. Wenn jedoch eine Instanz der Aktivität bereits vorhanden ist, leitet das System die Absicht an die vorhandene Instanz durch einen Aufruf an die onNewIntent() - Methode weiter, anstatt eine neue Instanz zu erstellen.

"singleInstance" - Wie "singleTask", außer dass das System keine anderen Aktivitäten in die Task startet, die die Instanz enthält. Die Aktivität ist immer das einzige und einzige Mitglied ihrer Aufgabe. http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

+0

Aber das ist ein ** Fragment ** ich benutze. Bis jetzt benutzte ich 'onResume()' des ** Fragments **. Was enthält nichts? Wie 'onNewIntent()'. Aber gibt es nicht eine Möglichkeit, den gesamten Backstack zu löschen und eine neue ** Aktivität ** –

+0

zu rufen Ich habe zwei Zeilen hinzugefügt, die Sie auf diese Weise versuchen können – Nirali

+0

Vielen Dank das hat funktioniert. –

7
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

Besuch finden. xml und starten Sie die Aktivität mit einem normalen Intent.

Verwandte Themen