Bringe die Aktivität in den Vordergrund, wenn sie ausgeführt wird, oder erstelle eine neue mit der Rücksicherung

8

Lassen Sie mich detailliert erklären; Ich habe eine Benachrichtigung und diese Benachrichtigung öffnet B activity mit zwei Fällen .

Fälle:

  1. Wenn die App geschlossen ist (läuft nicht im Hintergrund)
  2. Wenn die App geöffnet ist. (auf Hintergrund oder Front)

Fall 1

Ich klicke auf die Benachrichtigung und es öffnet sich die B activity mit case-1 . Wenn ich press back möchte, gehe ich zu A activity und kille B activity . Ich brauche B activity nicht mehr. Alles einfach von hier ohne flags zu benutzen. Wenn ich in B activity bin und zweimal von hier zurück drücke, geht es A activity und schließt dann app . Mein Problem hier ist, wenn ich die app von Navigationstasten des Telefons öffne (ich kann mich nicht an den Namen dieser Taste erinnern) App öffnet sich von B activity . Das habe ich nicht erwartet. Ich möchte A activity öffnen. Ich möchte B activity nicht mehr sehen.

Fall 2

Ich klicke auf die Benachrichtigung und es öffnet sich die B activity mit case-2 .Wenn ich press back möchte ich A activity nach vorne bringen, ohne etwas Neues zu erstellen. Wenn ich zweimal auf B activity drücke und die App schließe und dann die App erneut über die Navigationsschaltfläche des Telefons öffne, möchte ich die App von A activity öffnen.

Wie kann ich das richtig machen? Ich habe versucht, flags zu verwenden (ich habe bereits Dokumente gelesen), aber ich habe keine Arbeit bekommen. Was flags sollte ich verwenden, wenn ich die B activity und onBackPress Methode von B activity öffne, um A activity zu gehen, wie ich wollte

    
fthopkins 09.11.2017, 15:42
quelle

7 Antworten

4

Dies sollte durch Hinzufügen von

erreichbar sein %Vor%

zu der A-Aktivität im Manifest, dann können Sie einfach eine Aktivität aus der B-Aktivität onBackPressed öffnen und Sie haben A nur einmal im Stapel.

Wenn es nicht wie gewünscht funktioniert, können Sie eine abstrakte Klasse erstellen, die Activity erweitert und den Stack in einem statischen Objekt behandelt, und dann A & amp; B muss diese neue Klasse erweitern

    
Quentin Menini 13.11.2017 13:37
quelle
2

probiere das

aus %Vor%     
Jayesh 17.11.2017 12:04
quelle
2

Sie können dies erreichen, indem Sie FLAG_ACTIVITY_REORDER_TO_FRONT

hinzufügen %Vor%     
Sohail Zahid 17.11.2017 12:07
quelle
2

Sie können dies isTaskRoot () versuchen, was B als Wurzel zurückgibt

Wenn es wahr ist, dann starte A

Andernfalls können Sie B beenden.

B Aktivität

%Vor%

Sie können die B-Aktivität bei Benachrichtigung anrufen. Klicken Sie auf

Wenn A vorhanden ist, können Sie B beenden , andernfalls können Sie A

starten
  

Wenn FLAG_ACTIVITY_CLEAR_TOP gesetzt ist, wird die gerade gestartete Aktivität bereits in der aktuellen Aufgabe ausgeführt. Anstatt eine neue Instanz dieser Aktivität zu starten, werden alle anderen oben aufgeführten Aktivitäten geschlossen, und diese Absicht wird an die (jetzt oben) alte Aktivität als neue Absicht.

    
Amjad Khan 17.11.2017 14:10
quelle
2

Fügen Sie das einfach in ActivityB onBackPressed:

ein %Vor%

Wie lösen Sie Fall 1:

finish(); auf ActivityB Bei der BackPressed-Methode wird ActivityB nach dem Öffnen von ActivityA beendet. Nach dem Öffnen von ActivtyA wird ActivityB heruntergefahren.

Wie lösen Sie Fall 2:

Mit dieser Kombinationsflagge wird es tun, was Sie wollen. Es schließt alle Aktivitäten im Stapel und behält nur die Zielaktivität bei. Wenn eine Instanz einer Aktivität existiert, wird sie diese verwenden und OnNewInstance aufrufen, und wenn nicht, wird eine neue erstellt.

    
Kenji 18.11.2017 05:10
quelle
2

probiere das

aus %Vor%     
Naimish Vinchhi 18.11.2017 20:21
quelle
1

Wenn dies die einzige Instanz von Aktivität B ist, können Sie das Flag noHistory zum Manifest für Aktivität B hinzufügen

%Vor%

Dies wird verhindern, dass Aktivität B dem Backstack hinzugefügt wird, dies ist auch dynamisch möglich, indem das Intent-Flag FLAG_ACTIVITY_NO_HISTORY beim Aufrufen von Aktivität B verwendet wird.

Wenn Aktivität A gestartet wird, wenn Aktivität B beendet wird @Quentin Menini antwortet, dass eine einzelne Aufgabenaktivität im Manifest festgelegt wurde, wenn dies der einzige Weg ist, auf den Sie auf Aktivität A zugreifen möchten, oder den Intent Flag Intent. FLAG_ACTIVITY_REORDER_TO_FRONT, wie @Naimish Vinchhi vorgeschlagen hat, wird in diesem Fall den gewünschten Effekt haben.

Ссылка Link, um alle möglichen Absichtsflaggen zu sehen

Ссылка Link für alle möglichen Manifest-Aktivitätsoptionen

    
Thomas Stevens 19.11.2017 17:23
quelle