Wenn ich an zu klicken Logout in meiner Schaltfläche Profil Aktivität mag ich Benutzer nehmen Anmeldung Seite, wo er neue Anmeldeinformationen verwenden muss.
Daher habe ich diesen Code verwendet:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
in der onButtonClick
Schaltfläche Abmelden.
Das Problem ist jedoch, dass ich auf die Schaltfläche "Gerät zurück" in der Anmeldeaktivität klicke, um zur Profilaktivität zu gelangen. Ich hatte erwartet, dass die Anwendung geschlossen wird, wenn ich die Geräteschaltfläche auf LoginActivity drücke.
Was mache ich falsch?
Ich habe auch android:launchMode="singleTop"
das Manifest für meine LoginActivity hinzugefügt
Danke
android
back-stack
Archie.bpgc
quelle
quelle
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Ich habe die Antwort von dieser Frage erhalten: stackoverflow.com/questions/3473168/…Antworten:
Die hier vorgeschlagene Lösung hat bei mir funktioniert:
Java
Kotlin
Es erfordert jedoch API-Level> = 11.
quelle
FLAG_ACTIVITY_CLEAR_TASK
Leute , lest die Dokumentation von. Dies ist der offizielle Weg zu bekommen. Sie müssen nicht alle Aktivitäten in der App ändern.Hier ist eine Lösung, mit der Sie alle Aktivitäten Ihrer Anwendung löschen können, wenn Sie die Schaltfläche zum Abmelden verwenden.
Starten Sie die Aktivität jedes Mal wie folgt:
Wenn Sie die gesamte App schließen möchten, gehen Sie folgendermaßen vor:
RESULT_CLOSE_ALL ist eine endgültige globale Variable mit einer eindeutigen Ganzzahl, die signalisiert, dass Sie alle Aktivitäten schließen möchten.
Definieren Sie dann den
onActivityResult(...)
Rückruf jeder Aktivität. Wenn eine Aktivität mit dem Wert RESULT_CLOSE_ALL zurückgegeben wird, ruft sie außerdem Folgendes auffinish()
:Dies führt zu einem Kaskadeneffekt, der alle Ihre Aktivitäten schließt.
Dies ist jedoch ein Hack und wird so verwendet
startActivityForResult
, dass er nicht für die Verwendung konzipiert wurde.Ein besserer Weg, dies zu tun, wäre vielleicht die Verwendung der hier gezeigten Rundfunkempfänger:
Deaktivieren Sie beim Abmelden den Aktivitätsverlaufsstapel, um zu verhindern, dass die Schaltfläche "Zurück" nur angemeldete Aktivitäten öffnet
In diesen Threads finden Sie auch andere Methoden:
Android: Löschen Sie den Backstack
Beenden Sie alle vorherigen Aktivitäten
quelle
Um den Aktivitätsstapel vollständig zu löschen, möchten Sie mit TaskStackBuilder einen neuen Aufgabenstapel erstellen, zum Beispiel:
Dadurch wird nicht nur ein neuer, sauberer Aufgabenstapel erstellt, sondern es wird auch die ordnungsgemäße Funktion der Schaltfläche "Auf" ermöglicht, wenn Ihre LoginActivity über eine übergeordnete Aktivität verfügt.
quelle
FLAG_ACTIVITY_NEW_TASK
oderfinishAffinity()
hat bei mir nicht funktioniert. Nur diese Antwort löste den Zweck.finishAffinity()
in API 16 hinzugefügt.ActivityCompat.finishAffinity()
In früheren Versionen verwenden. Wenn Sie eine Aktivität mit Absicht starten und die aktuelle Aktivität beenden. Verwenden Sie jetztActivityCompat.finishAffinity()
stattdessenfinish()
. Alle gestapelten Aktivitäten, die unter der aktuellen Aktivität liegen, werden beendet. Es funktioniert gut für mich.quelle
ActivityCompat.finishAffinity()
finishAffinity()
Beendet auch die aktuelle Aktivität mit allen Aktivitäten, die im Backstack derselben Affinität vorhanden sind.Was hat bei mir funktioniert?
quelle
Eine mögliche Lösung, die ich Ihnen vorschlagen kann, ist das Hinzufügen
android:launchMode="singleTop"
des Manifests für meine ProfileActivity . und wenn Sie auf Abmelden klicken, können Sie sich abmelden, indem Sie erneut LoginActivity starten. Beim Abmelden können Sie dies aufrufen.quelle
Für API 11+ können Sie Folgendes verwenden
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
:Alle vorherigen Aktivitäten werden vollständig gelöscht und neue Aktivitäten gestartet.
quelle
Sie können versuchen
finishAffinity()
, es schließt alle aktuellen Aktivitäten und funktioniert auf und über Android 4.1quelle
Ich stehe auch vor dem gleichen Problem.
In der Login-Aktivität mache ich Folgendes.
beim Abmelden
Dies funktioniert gut, aber wenn ich in ActivityLoggedIn bin und die App minimiere und auf das Symbol für die Startschaltfläche in der App-Schublade klicke, startet die MainActivity erneut: - / Ich verwende das Flag
für die MainActivity.
quelle
Verwenden Sie Folgendes für
activity
Entfernen Sie das CLEAR_TASK- Flag für die Verwendung von Fragmenten.
Ich hoffe, dass dies für einige Leute nützlich sein kann.
quelle
Behalte es einfach
quelle
Keines der Intent-Flags hat bei mir funktioniert, aber so habe ich es behoben:
Wenn sich ein Benutzer von einer Aktivität abmeldet, musste ich eine Nachricht von dieser Aktivität senden und sie dann in den Aktivitäten empfangen, die ich schließen wollte. Danach rufe ich finish () auf. und es funktioniert ziemlich gut.
quelle
Versuchen Sie dies, es wird funktionieren:
quelle
In API - Ebene 11 oder größer ist , die Verwendung
FLAG_ACTIVITY_CLEAR_TASK
und dieFLAG_ACTIVITY_NEW_TASK
Fahne Absicht , alle die Aktivität Stapel zu löschen.quelle
Benutze das
quelle
Fügen Sie Manifest für Ihre Aktivität hinzu
android:launchMode="singleTask"
quelle
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 regelmäßig verwenden möchten, 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