我如何重新启动一个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();
}
当前回答
把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);
}
其他回答
我使用了这段代码,所以我仍然可以支持旧的Android版本,并在更新的Android版本上使用rebuild()。
代码:
public static void restartActivity(Activity activity){
if (Build.VERSION.SDK_INT >= 11) {
activity.recreate();
} else {
activity.finish();
activity.startActivity(activity.getIntent());
}
}
示例:
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());
}
}
}
实际上,下面的代码适用于API级别5及以上,所以如果您的目标API低于这个级别,您将得到与EboMike的代码非常相似的代码。
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);
这个解决方案对我很有效。
首先完成活动,然后再开始。
示例代码:
public void restartActivity(){
Intent mIntent = getIntent();
finish();
startActivity(mIntent);
}
尽管这个问题已经被回答了很多次。
如果从一个片段重新启动一个活动,我会这样做:
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);
}
});
所以你可能会觉得这有点过分了? 但是Handler发布允许你在生命周期方法中调用它。我在onRestart/onResume方法中使用了这个方法,当检查用户回到应用程序(安装了一些东西)之间的状态是否发生了变化。
如果没有Handler,如果你在一个奇怪的地方调用它,它只会杀死活动而不会重新启动它。
请随意提问。
欢呼, 克里斯
如果有人在找科特林的答案你只需要这句话。
片段
startActivity(Intent.makeRestartActivityTask(activity?.intent?.component))
活动
startActivity(Intent.makeRestartActivityTask(this.intent?.component))