it-swarm.com.de

Wie bringe ich eine Aktivität in den Vordergrund (Top of Stack)?

In Android habe ich eine Aktivität ExampleActivity definiert.

Als meine Anwendung gestartet wurde, wurde eine Instanz dieser A-Aktivität erstellt, sagen wir, es ist A. Wenn der Benutzer auf eine Schaltfläche in A geklickt hat, wurde eine weitere Instanz von B-Activity, B, erstellt. Jetzt ist der Task Stack B-A, wobei B oben steht. Dann klickte der Benutzer auf eine Schaltfläche in B, eine weitere Instanz von C-Activity, und C wurde erstellt. Jetzt ist der Taskstack C-B-A, wobei sich C oben befindet.

Wenn der Benutzer nun auf eine Schaltfläche in C klickt, möchte ich, dass die Anwendung A in den Vordergrund rückt, d. H.

Wie kann ich den Code schreiben, damit er umgesetzt wird?

72
user256239

Sie können diesen FLAG_ACTIVITY_REORDER_TO_FRONT ausprobieren (das Dokument beschreibt genau das, was Sie wollen)

88
Binh Tran

Die beste Methode, die ich gefunden habe, war die gleiche Absicht wie beim Android-Startbildschirm - der App-Launcher.

Zum Beispiel:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

Auf diese Weise wird die Aktivität in meinem Paket, die der Benutzer zuletzt verwendet hat, wieder in den Vordergrund gestellt. Ich fand dies nützlich, wenn ich den PendingIntent meines Dienstes benutze, um den Benutzer wieder zu meiner App zu bringen.

54
greg7gkb

Hier ist ein Codebeispiel, wie Sie das machen können:

Intent intent = getIntent(getApplicationContext(), A.class)

Dadurch wird sichergestellt, dass sich nur eine Instanz einer Aktivität auf dem Stapel befindet. 

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}
21

FLAG_ACTIVITY_REORDER_TO_FRONT : Wenn diese Option in einem an Context.startActivity () übergebenen Intent festgelegt ist, führt dieses Flag dazu, dass die gestartete Aktivität in den Vordergrund des Protokollstapels ihrer Task gestellt wird, wenn sie bereits ausgeführt wird.

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
7
FunGapApp

Ich denke, eine Kombination von Intent-Flags sollte den Trick tun. Insbesondere ist Intent.FLAG_ACTIVITY_CLEAR_TOP und Intent.FLAG_ACTIVITY_NEW_TASK.

Fügen Sie diese Flags Ihrer Absicht hinzu, bevor Sie startActvity aufrufen.

4
Al.

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

Hinweis Ihr Startmodus für die Homeaktivität sollte single_task sein

2
sujith s

Im Allgemeinen denke ich, dass diese Methode des Aktivitätsmanagements nicht empfohlen wird. Das Problem bei der Reaktivierung einer Aktivität in The Stack ist, dass diese Aktivität wahrscheinlich abgebrochen wurde. Mein Rat, in den Zustand Ihrer Aktivitäten zu erinnern und sie mit startActivity () zu starten 

Ich bin sicher, dass Sie diese Seite gesehen haben, aber für Ihre Bequemlichkeit dieser Link

1
Segfault

Wenn Sie beim Klicken auf eine Benachrichtigung eine Aktivität an den Anfang des Stapels bringen möchten, müssen Sie möglicherweise die folgenden Schritte ausführen, damit FLAG_ACTIVITY_REORDER_TO_FRONT funktioniert:

Die Lösung für mich bestand darin, einen Broadcast-Empfänger zu erstellen, der Broadcast-Aktionen überwacht, die die Benachrichtigung auslöst. Also im Grunde genommen:

  1. Benachrichtigung löst eine Broadcast-Aktion mit einem zusätzlichen Namen der zu startenden Aktivität aus.

  2. Der Broadcast-Empfänger fängt dies ab, wenn auf die Benachrichtigung geklickt wird. Anschließend wird eine Absicht zum Starten dieser Aktivität mit dem Flag FLAG_ACTIVITY_REORDER_TO_FRONT erstellt

  3. Aktivität wird an den Anfang des Aktivitätsstapels gebracht, keine Duplikate.

0