change - android studio title bar




Wie starte ich eine Android-Aktivität neu? (12)

Auch wenn dies mehrfach beantwortet wurde.

Wenn ich eine Aktivität von einem Fragment neu starte, würde ich es so machen:

new Handler().post(new Runnable() {

         @Override
         public void run()
         {
            Intent intent = getActivity().getIntent();
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
            getActivity().overridePendingTransition(0, 0);
            getActivity().finish();

            getActivity().overridePendingTransition(0, 0);
            startActivity(intent);
        }
    });

Du denkst vielleicht, dass das ein wenig übertrieben ist? Mit der Handler Buchung können Sie dies jedoch in einer Lebenszyklusmethode aufrufen. Ich habe dies in onRestart / onResume Methoden verwendet, als ich überprüft habe, ob sich der Status zwischen dem onResume des Benutzers zur App geändert hat. (etwas installiert).

Ohne den Handler wenn Sie ihn an einem seltsamen Ort aufrufen, wird die Aktivität einfach beendet und nicht neu gestartet.

Fühlen Sie sich frei, irgendwelche Fragen zu stellen.

Prost, Chris

Wie starte ich eine Android- Activity ? Ich habe Folgendes versucht, aber die Activity beendet.

public static void restartActivity(Activity act){

        Intent intent=new Intent();
        intent.setClass(act, act.getClass());
        act.startActivity(intent);
        act.finish();

}

Die Lösung für Ihre Frage ist:

public static void restartActivity(Activity act){
    Intent intent=new Intent();
    intent.setClass(act, act.getClass());
    ((Activity)act).startActivity(intent);
    ((Activity)act).finish();
}

Sie müssen in den Aktivitätskontext wechseln, um neue Aktivitäten zu starten und die aktuelle Aktivität zu beenden.

Hoffe das hilfreich..und funktioniert für mich.


Diese Lösung hat für mich funktioniert.

Beenden Sie zuerst die Aktivität und starten Sie sie erneut.

Beispielcode:

public void restartActivity(){
    Intent mIntent = getIntent();
    finish();
    startActivity(mIntent);
}

Es gibt einen Hacky-Weg, der bei jeder Aktivität funktionieren sollte, einschließlich der Hauptaktivität.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

Wenn sich die Ausrichtung ändert, erstellt Android im Allgemeinen Ihre Aktivität neu (außer Sie überschreiben diese). Diese Methode ist nützlich für 180-Grad-Drehungen, wenn Android Ihre Aktivität nicht neu erstellt.


Ich habe meinen Theme Switcher so gemacht:

Intent intent = getIntent();
finish();
startActivity(intent);

Im Grunde rufe ich finish() zuerst an, und ich benutze exakt die gleiche Absicht, mit der diese Aktivität gestartet wurde. Das scheint der Trick zu sein?

UPDATE: Wie unten von Ralf erwähnt, ist Activity.recreate() der Weg in API 11 und darüber hinaus. Dies ist vorzuziehen, wenn Sie sich in einer API11 + -Umgebung befinden. Sie können immer noch die aktuelle Version überprüfen und das obige Code-Snippet aufrufen, wenn Sie sich in API 10 oder darunter befinden. (Bitte vergiss nicht, Ralfs Antwort zu verbessern!)


In Verbindung mit seltsamem SurfaceView Lifecycle-Verhalten mit der Kamera . Ich habe herausgefunden, dass sich recreate () mit dem Lebenszyklus von SurfaceViews nicht gut verhält. SurfaceDestroyed wird während des Erholungszyklus nicht aufgerufen. Es heißt nach onResume (seltsam), an diesem Punkt ist meine SurfaceView zerstört.

Die ursprüngliche Art, eine Aktivität wiederherzustellen, funktioniert einwandfrei.

Intent intent = getIntent();
finish();
startActivity(intent);

Ich kann nicht genau herausfinden, warum das so ist, aber es ist nur eine Beobachtung, die hoffentlich andere in die Zukunft führen kann, weil es meine Probleme mit SurfaceViews behoben hat


Nur um die Antworten von Ralf und Ben zu kombinieren (einschließlich Änderungen in Kommentaren):

if (Build.VERSION.SDK_INT >= 11) {
    recreate();
} else {
    Intent intent = getIntent();
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);

    startActivity(intent);
    overridePendingTransition(0, 0);
}

Rufen Sie die Methode onCreate auf. Zum Beispiel onCreate(null);


Seit API Level 11 (Honeycomb) können Sie die Activity.recreate() Methode der Aktivität aufrufen (dank this Antwort).

Die recreate () -Methode verhält sich genau wie eine Konfigurationsänderung. Daher werden Ihre onSaveInstanceState () - und onRestoreInstanceState () -Methoden gegebenenfalls auch aufgerufen.


Tatsächlich ist der folgende Code für API-Level 5 und höher gültig. Wenn Ihr Ziel-API also niedriger ist, erhalten Sie etwas, das dem EboMike-Code sehr ähnlich ist.

intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);

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, wenn die Ausrichtung geändert wird (dh Ihr Status wird gespeichert und an onCreate(Bundle) )?

Wenn Sie dies nicht tun, besteht eine mögliche Problemumgehung darin, eine zusätzliche Dummy-Aktivität zu verwenden, die mit der ersten Aktivität gestartet wird, und mit der Aufgabe, eine neue Instanz davon zu starten. Oder verzögern Sie einfach den Aufruf von act.finish() , nachdem der neue gestartet wurde.

Wenn Sie den größten Teil des Zustands speichern müssen, geraten Sie in ziemlich tiefe Gewässer, da es nicht trivial ist, alle Eigenschaften Ihres Zustands zu übergeben, insbesondere ohne den alten Kontext / Ihre alte Aktivität zu verlieren, indem Sie ihn an die neue Instanz übergeben.

Bitte geben Sie an, was Sie zu tun versuchen.


Wenn Sie von einem Fragment anrufen, tun Sie dies unter dem Code.

Intent intent = getActivity().getIntent();
getActivity().finish();
startActivity(intent);




android-activity