我如何重新启动一个Android活动?我尝试了下面的方法,但是这个活动就是退出了。
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
我如何重新启动一个Android活动?我尝试了下面的方法,但是这个活动就是退出了。
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
当前回答
由于API级别11 (Honeycomb),您可以调用活动的rebuild()方法(多亏了这个答案)。
rebuild()方法的作用就像配置更改一样,因此如果适用,也会调用onSaveInstanceState()和onRestoreInstanceState()方法。
其他回答
调用onCreate方法。例如onCreate(null);
把Ralf和Ben的回答(包括评论中的变化)结合起来:
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);
}
简单的方法是
public void restartActivity(){
Intent i = getIntent();
finish();
startActivity(i);
}
如果你从一些片段调用,那么做下面的代码。
Intent intent = getActivity().getIntent();
getActivity().finish();
startActivity(intent);
如果您删除最后一行,您将创建新的act Activity,但您的旧实例仍然是活动的。
你需要重新启动活动,就像方向改变(即你的状态被保存并传递给onCreate(Bundle))?
如果您不这样做,一种可能的解决方法是使用一个额外的虚拟Activity,它将从第一个Activity启动,该任务是启动它的新实例。或者只是在新的调用启动后延迟对act.finish()的调用。
如果您需要保存大部分状态,那么您就陷入了相当大的困境,因为通过将状态传递给新实例来传递状态的所有属性并不是一件简单的事情,特别是在不泄漏旧的Context/Activity的情况下。
请详细说明你要做什么。