我如何重新启动一个Android活动?我尝试了下面的方法,但是这个活动就是退出了。

public static void restartActivity(Activity act){

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

}

当前回答

好吧,这里没有列出,但有一些已经发布的组合:

if (Build.VERSION.SDK_INT >= 11) {
    recreate();   
} else {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

其他回答

有一种俗气的方法适用于任何活动,包括主要活动。

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

当方向改变时,Android通常会重新创建你的活动(除非你覆盖它)。当Android不重新创建你的活动时,这个方法对于180度旋转非常有用。

public void onRestart() {
    super.onRestart();
    Intent intent=new Intent();
    intent.setClass(act, act.getClass());
    finish();
    act.startActivity(intent);
}

试着用这个..

好吧,这里没有列出,但有一些已经发布的组合:

if (Build.VERSION.SDK_INT >= 11) {
    recreate();   
} else {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

由于API级别11 (Honeycomb),您可以调用活动的rebuild()方法(多亏了这个答案)。

rebuild()方法的作用就像配置更改一样,因此如果适用,也会调用onSaveInstanceState()和onRestoreInstanceState()方法。

我的主题切换是这样的:

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

基本上,我首先调用finish(),并且我使用的是这个活动开始时的完全相同的意图。这似乎奏效了?

更新:正如Ralf在下面指出的,activity . rebuild()是API 11及以后的发展方向。如果您在API11+环境中,这是可取的。如果您在API 10或以下,您仍然可以检查当前版本并调用上面的代码片段。(请不要忘记为拉尔夫的答案投票!)