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.

31voto

Joseph Earl Punkte 23153
  1. Añadir android:launchMode="singleTop" zum Aktivitätselement in Ihrem Manifest für Aktivität A
  2. Dann verwenden Sie intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) y intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) beim Start von Aktivität A

Das heißt, wenn Aktivität A gestartet wird, werden alle darüber liegenden Aufgaben gelöscht, so dass A an erster Stelle steht. Es wird ein neuer Backstack mit A an der Wurzel erstellt, und mit singleTop stellt sicher, dass Sie A nur einmal starten (da A jetzt aufgrund der ..._CLEAR_TOP ).

19voto

Muhammad Aamir Ali Punkte 19629

Versuchen Sie es mit

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

und nicht

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

18voto

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 ist Arbeit für mich Entfernen Sie im Bildschirm Obere Zahlung 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

10voto

Firzan Shaikh Punkte 465
Use finishAffinity() to clear all backstack with existing one.

Suppose, Activities A, B and C are in stack, and finishAffinity(); is called in Activity C, 

    - Activity B will be finished / removing from stack.
    - Activity A will be finished / removing from stack.
    - Activity C will finished / removing from stack.

9voto

Richard Le Mesurier Punkte 28822

Gemäß Wakka en Entfernen einer Aktivität aus dem Verlaufsstapel ...


Añadir android:noHistory="true" Attribut zu Ihrem <activity> im AndroidManifest.xml wie diese:

    <activity android:name=".MyActivity"
        android:noHistory="true">
    </activity>

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