In Android habe ich einige Aktivitäten, sagen wir A, B, C.
In A verwende ich diesen Code, um B zu öffnen:
Intent intent = new Intent(this, B.class);
startActivity(intent);
In B verwende ich diesen Code, um C zu öffnen:
Intent intent = new Intent(this, C.class);
startActivity(intent);
Wenn der Benutzer in C auf eine Schaltfläche tippt, möchte ich zu A zurückkehren und den hinteren Stapel löschen (B und C schließen). Wenn der Benutzer die Zurück-Taste B und C nicht anzeigt, habe ich Folgendes versucht:
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Aber B und C werden immer noch angezeigt, wenn ich die Zurück-Taste benutze, wenn ich wieder in Aktivität A bin. Wie kann ich das vermeiden?
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
quelle
CLEAR_TOP
Flagge - diese Kombination ist die EINZIGE, die den gesamten Stapel vollständig gelöscht und die neue Aktivität zur einzigen in der App gemacht hat. Vielen Dank!Was ist mit dem Hinzufügen einer Manifestdatei für verwandte Aktivitäten:
zur Aktivitätsdefinition von B und C? Sie werden nicht zum Backstack hinzugefügt. Ich bin mir nicht sicher, ob du das willst.
quelle
Das stört mich lange. Schließlich habe ich es so herausgefunden:
Verwenden Sie im Fragment:
Verwenden Sie in Aktivität (fügen Sie im
Intent.FLAG_ACTIVITY_CLEAR_TASK
Vergleich zum Fragment ein weiteres Intent-Flag hinzu ):quelle
android:launchMode="singleTop"
dem Aktivitätselement in Ihrem Manifest für Aktivität A hinzuintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
undintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
beim Starten von Aktivität A.Dies bedeutet, dass beim Starten von Aktivität A alle darüber liegenden Aufgaben gelöscht werden, sodass A ganz oben steht. Ein neuer Backstack wird mit A im Stammverzeichnis erstellt. Durch die Verwendung wird
singleTop
sichergestellt, dass Sie A immer nur einmal starten (da A jetzt aufgrund von oben liegt..._CLEAR_TOP
).quelle
Ab API 16 (Jelly Bean) können Sie einfach aufrufen
finishAffinity()
.Jetzt können Sie auch anrufen
ActivityCompat.finishAffinity(Activity activity)
mit der Kompatibilitätsbibliothek .Stellen Sie sicher, dass taskAffinity im Manifest auf einen Paketnamen festgelegt ist, der für diese Gruppe von Aktivitäten eindeutig ist.
Weitere Informationen finden Sie unter:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29
quelle
Versuchen Sie es mit
und nicht
quelle
Wenn Ihre Anwendung mindestens SDK-Version 16 hat, können Sie finishAffinity () verwenden.
Beenden Sie diese Aktivität sowie alle Aktivitäten direkt darunter in der aktuellen Aufgabe, die dieselbe Affinität haben.
Dies ist Arbeit für mich. Im Bildschirm "Top Payment" entfernen Sie alle Backstack-Aktivitäten.
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
quelle
Wie pro Wakka in eine Aktivität aus der Geschichte Stapel Entfernen ...
In
android:noHistory="true"
Attribut auf Ihre<activity>
in derAndroidManifest.xml
wie folgt aus :quelle
Versuchen Sie diesen Code für zukünftige Forschungen.
quelle
Verwenden Sie finishAffinity (); in Aufgabe C beim Starten von Aufgabe A, um Backstack-Aktivitäten zu löschen.
quelle
Verwenden Sie diesen Code, um eine neue Aktivität zu starten und alle anderen Aktivitätsstapel oder Rückstapel zu schließen oder zu zerstören.
quelle
quelle
Ich habe eine interessante Lösung gefunden, die helfen könnte. Ich habe das in meiner
onBackPressed()
Methode gemacht.FinishAffinity
Entfernt die Verbindung der vorhandenen Aktivität zu ihrem Stapel. Und dann hilft Ihnen das Beenden, diese Aktivität zu beenden. Welches wird schließlich die Anwendung beenden.quelle
Ich fand die Antworten hier etwas irreführend, weil der Code in der ursprünglichen Frage für mich gut zu funktionieren scheint?
Wenn A die Stammaktivität ist und B oder C nur mit FLAG_ACTIVITY_CLEAR_TOP gestartet wird, werden B und C vom Backstack entfernt.
quelle
In Kotlin ist es fast dasselbe wie in Java. Nur | Symbol wird durch oder Text ersetzt. Also ist es geschrieben wie-
quelle
Ich habe alle Lösungen ausprobiert und keine hat individuell für mich gearbeitet. Meine Lösung lautet:
Erklären Sie,
Activity A
wieSingleTop
durch den Einsatz[android:launchMode="singleTop"]
in Android manifestieren.Fügen Sie nun die folgenden Flags hinzu, während Sie
A
von einem beliebigen Ort aus starten . Der Stapel wird gelöscht.quelle
Intent.FLAG_ACTIVITY_CLEAR_TOP
wird in diesem Fall nicht funktionieren. Benutzen Sie bitte(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
Weitere Informationen finden Sie in dieser Dokumentation.
quelle
Es klingt für mich wie Sie brauchen ,
Activity C
ausActivity B
unter VerwendungstartActivityForResult()
. Wenn Sie auf eine Schaltfläche klickenActivity C
, wird der Anruf beendetsetResult(RESULT_OK)
undfinish()
damitActivity C
beendet. InActivity B
könnten Sie dieonActivityResult()
Antwort erhalten, indem Sie auch sich selbst anrufenfinish()
, und Sie würden dann zurück zuActivity A
.quelle
logout.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TASK); logout.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
quelle
Sie können dieses Beispiel verwenden, um Ihre
Activity A
von anzurufenActivity C
Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);
quelle
Für mich hat das Hinzufügen
Intent.FLAG_ACTIVITY_CLEAR_TASK
das Problem gelöstquelle
Fortgeschrittenes, wiederverwendbares Kotlin:
Sie können das Flag direkt mit der Setter-Methode setzen. In Kotlin
or
ist der Ersatz für Java bitweise oder|
.Wenn Sie dies mehrmals verwenden, erstellen Sie eine Absichtserweiterungsfunktion
Sie können diese Funktion dann direkt aufrufen, bevor Sie die Absicht starten
Wenn Sie in anderen Situationen die Option zum Hinzufügen zusätzlicher Flags benötigen, fügen Sie der Erweiterungsfunktion einen optionalen Parameter hinzu.
quelle
Darüber hinaus
FLAG_ACTIVITY_CLEAR_TOP
können Sie auch Folgendes hinzufügenIntent.FLAG_ACTIVITY_SINGLE_TOP
:intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
quelle
Der angegebene Code funktioniert korrekt. Ich habe es im Application Life Cycle-Beispiel versucht.
Ich habe B und C nicht im Backstack, nachdem ich Aktivität A mit dem Flag FLAG_ACTIVITY_CLEAR_TOP gestartet habe
quelle
Ich rief an,
activity_name.this.finish()
nachdem ich neue Absichten gestartet hatte und es funktionierte für mich.Aber es wird bei mir nicht funktionieren ... Ich schlage diese Lösung nicht zur Verwendung vor, aber wenn das Setzen des Flags bei Ihnen nicht funktioniert, können Sie dies versuchen. Trotzdem empfehle ich, sie nicht zu verwenden
quelle
Fügen Sie in der Absicht NO History Flag hinzu.
Starten Sie in Aktivität B die Aktivität C wie folgt >>>>>>
quelle
Im Manifest
und
quelle
Fügen Sie dies entweder zu Ihrem
Activity B
und hinzuActivity C
oder
Override
onBackPressed
Funktion, um ein Zurückdrücken mit a zu vermeidenreturn
.quelle
Verwenden Sie die Methode setFlags (), um die Rückseite zu löschen, alle Aktivitäten zu schließen und Ihre Aktivität zu starten
quelle