364 Stimmen

Android: Den hinteren Stapel löschen

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 auf eine Schaltfläche in C tippt, möchte ich zu A zurückkehren und den hinteren Stapel löschen (sowohl B als auch C schließen). Also, wenn der Benutzer die Zurück-Taste B und C wird nicht angezeigt, ich habe versucht, die folgenden:

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.

0voto

james Punkte 25833

Zusätzlich zu FLAG_ACTIVITY_CLEAR_TOP können Sie versuchen, Folgendes hinzuzufügen Intent.FLAG_ACTIVITY_SINGLE_TOP auch:

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

0voto

Sathesh Punkte 6116

Der angegebene Code funktioniert korrekt. Ich habe es mit dem Application Life Cycle-Beispiel versucht.

Ich habe B und C nicht im hinteren Stapel, nachdem ich Aktivität A mit dem Flag FLAG_ACTIVITY_CLEAR_TOP gestartet habe.

-2voto

Dies ist eine wirklich alte Antwort und ich habe nicht wirklich eine richtige Lösung dafür gefunden, zu dem einzigen Zweck der Clearing der backStack, entschied ich mich, meine eigenen Backstack, die nicht einmal ein Stapel tbh, aber es muss nicht sein, da wir alles in ihm sowieso löschen wollen zu erstellen;

Theres einen Overhead von handlind der Backstack jedes Mal, aber es gab mir die Kontrolle, die ich brauchte;


Deklarieren Sie zunächst eine öffentliche statische Liste von Aktivitäten (oder Fragmenten, was immer Sie brauchen);

public static ArrayList <Activity> backStack = new ArrayList<>();

Und innerhalb der onCreate-Methode aller anderen Aktivitäten:

MainActivity.backStack.add(this);

Und schließlich, wenn Sie den Backstack löschen wollen, rufen Sie einfach auf:

public static void killBackStack () {
    for (Activity ac : backStack) {
        if (ac != null)
            ac.finish();
    }
}

-27voto

slav Punkte 197
Intent intent = new Intent(this, A.class);
startActivity(intent);
finish();

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