2010-01-22 4 views
47

Ich muss die aktuelle Aktivität durch eine neue ersetzen. Das heißt, ich möchte eine neue Aktivität starten und die aktuelle Aktivität aus dem Aufgabenstapel entfernen.Aktuelle Aktivität ersetzen

Basierend auf der Dokumentation scheint es der beste Weg wäre, die Aktivität mit Activity.startActivity wie üblich zu starten, und rufen Sie dann sofort Activity.finish, um die aktuelle Aktivität zu schließen.

Ist dies eine gültige Verwendung dieser APIs oder sollte ich etwas anderes tun?

Antwort

50

Ja. Es ist in Ordnung, api auf diese Weise zu verwenden.

+3

Hat diese Arbeit mit startActivityForResult zu aktualisieren? Wenn ja, wo wird das Ergebnis veröffentlicht? – nmr

+1

Für Leute, die sich über die @ nmr-Frage wundern, was ich getan habe, ist, die neue Aktivität für result zu starten und dann finish() in onActivityResult nach Bedarf aufzurufen. –

5

versuchen FLAG_ACTIVITY_TASK_ON_HOME, FLAG_ACTIVITY_NEW_TASK in der Absicht Fahnen

24

Der richtige Weg, mit diesem zu erreichen, wird mit dem folgenden:

Intent intent = new Intent(this,MyActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME); 
startActivity(intent); 
this.finish(); 

Der Code vorausgesetzt, dass Sie in einer Aktivität sind, sonst, wenn Sie Fragmente verwenden Verwenden Sie getActivity()

Auf diese Weise wird die Aktivität gestartet, Sie Ihre Hierarchie für Ihre Schaltfläche zurück richtig festlegen, und Sie zerstören auch die entsprechenden Aktivität essen.

2

Sie können android hinzufügen: launchMode = "SingleInstance" in Ihrer Tätigkeit, dann überschreiben onNewIntent Methode Datum

Referenz PlayerActivity in ExoPlayer Demo

+0

Dies ist eine sehr nützliche Sache, wenn Sie eine logische/funktionale "Home" -Seite haben und viel Navigation verwenden (wie eine Navigationsleiste) –