423 Stimmen

Beende alle vorherigen Aktivitäten

Meine Anwendung hat die folgenden Ablaufbilder:

Home->screen 1->screen 2->screen 3->screen 4->screen 5

Jetzt habe ich eine gemeinsame log out Schaltfläche in jedem Bildschirm

( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5 )

Ich möchte, dass, wenn der Benutzer auf die Schaltfläche "Abmelden" (von einem beliebigen Bildschirm) klickt, alle Bildschirme beendet werden und ein neuer Bildschirm Log in wird geöffnet.

Ich habe fast alle ausprobiert FLAG_ACTIVITY um dies zu erreichen. Ich gehe auch durch einige Antworten in Stackoverflow, aber nicht in der Lage, das Problem zu lösen. Meine Anwendung ist auf Android 1.6 so nicht in der Lage zu verwenden FLAG_ACTIVITY_CLEAR_TASK

Gibt es eine Möglichkeit, das Problem zu lösen?

33voto

Gem Punkte 1466
Intent intent = new Intent(this, classObject);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

Dies wird für alle Android-Versionen funktionieren. Wo IntentCompat die in der Android-Support-Bibliothek hinzugefügte Klasse.

30voto

Aristo Michael Punkte 2138

Verwenden Sie für die Aktivität Folgendes

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

CLEAR_TASK-Flag für die Verwendung von Fragmenten entfernen.

Ich hoffe, dass dies für einige Leute von Nutzen sein kann.

24voto

John Punkte 465

Nebenbei bemerkt, gut zu wissen
Diese Antwort funktioniert ( https://stackoverflow.com/a/13468685/7034327 )

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
this.finish();

Dies funktioniert jedoch nicht

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

.setFlags() ersetzt alle vorherigen Flaggen und fügt keine neuen Flaggen hinzu, während .addFlags() tut.

Dies wird also auch funktionieren

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

22voto

gmrl Punkte 221

De [entwickler.android.de](http://developer.android.com/reference/android/app/Activity.html#finishAffinity()) :

public void finishAffinity ()

Hinzugefügt in API Stufe 16

Erledigen Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Aufgabe, die dieselbe Affinität haben. Dies wird typischerweise verwendet, wenn eine Anwendung in einer anderen Aufgabe gestartet werden kann (z. B. aus einer ACTION_VIEW eines Inhaltstyps, den sie versteht) und der Benutzer die Aufwärtsnavigation verwendet hat, um aus der aktuellen Aufgabe in seine eigene Aufgabe zu wechseln. Wenn der Benutzer in diesem Fall nach unten in andere Aktivitäten der zweiten Anwendung navigiert hat, sollten alle diese Aktivitäten als Teil des Aufgabenwechsels aus der ursprünglichen Aufgabe entfernt werden.

Beachten Sie, dass dieser Abschluss es Ihnen nicht erlaubt, Ergebnisse an die vorherige Aktivität zu liefern, und dass eine Ausnahme ausgelöst wird, wenn Sie dies versuchen.

16voto

Jaydeep purohit Punkte 1496

Wenn Ihre Anwendung mindestens sdk Version 16 hat, können Sie finishAffinity()

Erledigen Sie diese Aktivität sowie alle unmittelbar darunter liegenden Aktivitäten in der aktuellen Aufgabe, die dieselbe Affinität haben.

Das funktioniert bei mir. Im oberen Zahlungsbildschirm entfernen Sie alle Backstack-Aktivitäten,

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.Android.com/reference/Android/app/Activity.html#finishAffinity%28%29

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X