Wie starte ich ein Android neu Activity
? Ich habe folgendes versucht, aber das Activity
hört einfach auf.
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
android
android-activity
Samet ÖZTOPRAK
quelle
quelle
Antworten:
Ich habe meinen Theme Switcher so gemacht:
Grundsätzlich rufe ich
finish()
zuerst an und verwende genau die gleiche Absicht, mit der diese Aktivität gestartet wurde. Das scheint den Trick zu tun?UPDATE: Wie von Ralf weiter unten ausgeführt,
Activity.recreate()
ist dies der richtige Weg in API 11 und darüber hinaus. Dies ist vorzuziehen, wenn Sie sich in einer API11 + -Umgebung befinden. Sie können weiterhin die aktuelle Version überprüfen und das obige Code-Snippet aufrufen, wenn Sie sich in API 10 oder niedriger befinden. (Bitte vergiss nicht, Ralfs Antwort zu bewerten!)quelle
Seit API Level 11 (Honeycomb) können Sie die Methode recreate () der Aktivität aufrufen (dank dieser Antwort).
Die Methode recreate () verhält sich wie eine Konfigurationsänderung. Daher werden gegebenenfalls auch die Methoden onSaveInstanceState () und onRestoreInstanceState () aufgerufen.
quelle
Vor SDK 11 ist dies folgendermaßen möglich:
quelle
overridePendingTransition(0, 0);
nachfinish()
undstartActivity()
jeweils nicht , wo Sie es genannt ...Nur um die Antworten von Ralf und Ben zu kombinieren (einschließlich Änderungen in den Kommentaren):
quelle
Ich habe diesen Code verwendet, damit ich noch ältere Android-Versionen unterstützen und verwenden kann
recreate()
auf neueren Android-Versionen verwenden kann.Code:
Stichprobe:
quelle
Diese Lösung hat bei mir funktioniert.
Beenden Sie zuerst die Aktivität und starten Sie sie dann erneut.
Beispielcode:
quelle
Dies ist bei weitem der einfachste Weg, um die aktuelle Aktivität neu zu starten:
quelle
Rufen Sie diese Methode auf
Vielen Dank,
quelle
Obwohl dies mehrfach beantwortet wurde.
Wenn ich eine Aktivität von einem Fragment aus neu starten würde, würde ich es so machen:
Sie denken also vielleicht, dass dies ein wenig übertrieben ist? Mit der
Handler
Buchung können Sie dies jedoch in einer Lebenszyklusmethode aufrufen. Ich habe diese Methode inonRestart
/onResume
verwendet, um zu überprüfen, ob sich der Status zwischen dem Benutzer, der zur App zurückkehrt, geändert hat. (etwas installiert).Ohne das,
Handler
wenn Sie es an einer ungeraden Stelle aufrufen, wird die Aktivität nur beendet und nicht neu gestartet.Fühlen Sie sich frei, Fragen zu stellen.
Prost, Chris
quelle
Nun, dies ist nicht aufgeführt, aber eine Kombination von einigen, die bereits veröffentlicht wurde:
quelle
In Verbindung mit seltsamem SurfaceView-Lebenszyklusverhalten mit der Kamera . Ich habe festgestellt, dass sich recreate () nicht gut mit dem Lebenszyklus von SurfaceViews verhält. surfaceDestroyed wird während des Erholungszyklus nie aufgerufen. Es wird nach onResume (seltsam) aufgerufen. An diesem Punkt wird meine SurfaceView zerstört.
Die ursprüngliche Art, eine Aktivität neu zu erstellen, funktioniert einwandfrei.
Ich kann nicht genau herausfinden, warum dies so ist, aber es ist nur eine Beobachtung, die hoffentlich andere in Zukunft leiten kann, da sie meine Probleme mit SurfaceViews behoben hat
quelle
Ich frage mich, warum niemand erwähnt hat
Intent.makeRestartActivityTask()
, was genau diesen Zweck sauber macht.Diese Methode wird
Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
als Standardflags festgelegt.quelle
Tatsächlich gilt der folgende Code für API-Level 5 und höher. Wenn Ihre Ziel-API niedriger ist, erhalten Sie am Ende etwas, das dem EboMike-Code sehr ähnlich ist.
quelle
Es gibt einen hackigen Weg, der bei jeder Aktivität funktionieren sollte, einschließlich der Hauptaktivität.
Wenn sich die Ausrichtung ändert, erstellt Android Ihre Aktivität im Allgemeinen neu (es sei denn, Sie überschreiben sie). Diese Methode ist nützlich für 180-Grad-Drehungen, wenn Android Ihre Aktivität nicht neu erstellt.
quelle
versuchen Sie dies zu verwenden ..
quelle
Die Lösung für Ihre Frage lautet:
Sie müssen in den Aktivitätskontext wechseln, um neue Aktivitäten zu starten und die aktuelle Aktivität zu beenden.
Hoffe das ist hilfreich ... und funktioniert für mich.
quelle
Wenn Sie die letzte Zeile entfernen, erstellen Sie eine neue
act
Aktivität, aber Ihre alte Instanz ist noch aktiv.Müssen Sie die Aktivität neu starten, beispielsweise wenn die Ausrichtung geändert wird (dh Ihr Status wird gespeichert und an übergeben
onCreate(Bundle)
)?Wenn Sie dies nicht tun, besteht eine mögliche Problemumgehung darin, eine zusätzliche Dummy-Aktivität zu verwenden, die ab der ersten Aktivität gestartet wird und deren Aufgabe darin besteht, eine neue Instanz davon zu starten. Oder verzögern Sie einfach den Anruf an
act.finish()
, nachdem der neue gestartet wurde.Wenn Sie den größten Teil des Status speichern müssen, befinden Sie sich in ziemlich tiefen Gewässern, da es nicht trivial ist, alle Eigenschaften Ihres Status zu übergeben, insbesondere ohne Ihren alten Kontext / Ihre alte Aktivität zu verlieren, indem Sie ihn an die neue Instanz übergeben.
Bitte geben Sie an, was Sie tun möchten.
quelle
So mache ich es.
quelle
Wenn Sie von einem Fragment aus anrufen, gehen Sie wie folgt vor.
quelle
Sie können einfach verwenden
Methode wie folgt
und rufen Sie onRestart () auf, wo Sie die aktuelle Aktivität neu starten möchten
quelle
Rufen Sie die Methode onCreate auf. Zum Beispiel
onCreate(null);
quelle