web-dev-qa-db-de.com

Android: Aktivität öffnen, ohne im Stapel zu speichern

Ich habe 2 Aktivitäten: Main und List.

Über Main können Sie List öffnen. Aus der Liste können Sie Main öffnen.

Ich möchte, dass bei jedem Öffnen von List nicht in der 'History' gespeichert wird. Wenn Sie also von Main kann nicht zurück drücken, kehren Sie zur Liste zurück.

Ist es möglich?

87
realtebo

Wenn Sie das Activity Ihrer Liste starten, setzen Sie die Flags Intent wie folgt:

Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);

Das FLAG_ACTIVITY_NO_HISTORY Flag verhindert, dass das neue Activity zum Verlaufsstapel hinzugefügt wird.

NB: Wie @Sam betont, können Sie stattdessen i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); verwenden. Es gibt keinen funktionalen Unterschied.

145
Eric

Fügen Sie in der Manifestdatei Folgendes hinzu:

Android:noHistory="true" 

auf die Aktivität, die Sie nicht auf dem Stapel behalten möchten.

86
Marcin S.

Verwenden Sie die neue Aufgabe mit Löschen. Dies funktionierte in meinem Fall, als die anderen Optionen nicht taten.

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

Lösche den gesamten Verlaufsstapel und starte eine neue Aktivität auf Android

27
Kalel Wade

Wenn Sie bei Ihrer Aktivität direkt nach dem Öffnen einer anderen Aktivität finish () aufrufen, wird die beendete Aktivität aus dem Stapel entfernt.

beispielsweise:

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
19
dac2009

In meinem speziellen Fall FLAG_ACTIVITY_NO_HISTORY funktioniert nicht. Weder hat FLAG_ACTIVITY_NEW_TASK oder FLAG_ACTIVITY_CLEAR_TASK alleine arbeiten.

Jedoch FLAG_ACTIVITY_NEW_TASK und FLAG_ACTIVITY_CLEAR_TASK zusammen hat funktioniert.

Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
4
Fred

Ich wollte nur eine Möglichkeit hinzufügen, dies in Kotlin zu tun:

val i = Intent(this, LogInActivity::class.Java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
2
Devin B

Verspätete Antwort, verleiht aber anderen Antworten Tiefe. Alles hängt davon ab, was mit anderen Aktivitäten geschehen soll, die von dieser Aktivität aus gestartet wurden

Option 1 - Nur diese eine Aktivität sollte keine Anrufaktivität enthalten

Dann machen Sie einfach:

Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

Option 2 - Alle Aktivitäten, die von dieser bestimmten Aktivität gestartet wurden, sollten keinen Verlauf haben

Fügen Sie dann das Manifest der aufrufenden Aktivität hinzu:

Android:noHistory="true" 

Wenn Sie jedoch einen Verlauf in einer neuen Aktivität haben möchten, müssen Sie die Markierung manuell entfernen:

Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

Hoffe das klärt andere Antworten :)

1
Miku

füge die Flagge hinzu FLAG_ACTIVITY_NEW_TASK zu Ihrem Intent

http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

1
VinceFR

Versuchen Sie FLAG_ACTIVITY_CLEAR_TOP, wenn die Aktivität bereits ausgeführt wird:

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
0
live-love