432 Stimmen

Neustart der Aktivität in Android

Wie starte ich ein Android-Gerät neu? Activity ? Ich habe Folgendes versucht, aber die Activity einfach aufgibt.

public static void restartActivity(Activity act){

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

}

682voto

EboMike Punkte 74805

Ich habe meinen Theme Switcher so gemacht:

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

Im Grunde rufe ich finish() zuerst, und ich verwende genau dieselbe Absicht, mit der diese Aktivität begonnen wurde. Das scheint zu klappen?

UPDATE: Wie von Ralf unten angemerkt, Activity.recreate() ist der richtige 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 in API 10 oder darunter sind. (Bitte vergessen Sie nicht, Ralfs Antwort hochzustufen!)

400voto

Ralf Punkte 14350

Seit API-Ebene 11 (Honeycomb) können Sie die neu erstellen() Methode der Aktivität (Dank an ce Antwort).

Die Methode recreate() verhält sich wie eine Konfigurationsänderung, so dass Ihre Methoden onSaveInstanceState() und onRestoreInstanceState() ebenfalls aufgerufen werden, falls zutreffend.

140voto

Ben Punkte 15418

Vor SDK 11 konnte man dies folgendermaßen erreichen:

public void reload() {
    Intent intent = getIntent();
    overridePendingTransition(0, 0);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();
    overridePendingTransition(0, 0);
    startActivity(intent);
}

118voto

JustinMorris Punkte 7099

Um die Antworten von Ralf und Ben zusammenzufassen (einschließlich der in den Kommentaren vorgenommenen Änderungen):

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);
}

39voto

Thomas Vos Punkte 11760

Ich habe diesen Code verwendet, damit ich auch ältere Android-Versionen unterstützen kann und recreate() auf neueren Android-Versionen.

Code:

public static void restartActivity(Activity activity){
    if (Build.VERSION.SDK_INT >= 11) {
        activity.recreate();
    } else {
        activity.finish();
        activity.startActivity(activity.getIntent());
    }
}

Beispiel:

import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Activity mActivity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mActivity = MainActivity.this;

        Button button = (Button) findViewById(R.id.restart_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                restartActivity(mActivity);
            }
        });
    }

    public static void restartActivity(Activity activity) {
        if (Build.VERSION.SDK_INT >= 11) {
            activity.recreate();
        } else {
            activity.finish();
            activity.startActivity(activity.getIntent());
        }
    }
}

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