如何重启Android Activity
?我尝试了以下方法,但是Activity
只是退出了。
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
如何重启Android Activity
?我尝试了以下方法,但是Activity
只是退出了。
public static void restartActivity(Activity act){
Intent intent=new Intent();
intent.setClass(act, act.getClass());
act.startActivity(intent);
act.finish();
}
我是这样做我的主题切换器的:
Intent intent = getIntent();
finish();
startActivity(intent);
我基本上是首先调用了finish()
,然后使用了与启动此活动时完全相同的意图。这似乎解决了问题?
更新:正如Ralf在下面指出的那样,在API 11及以上版本中,Activity.recreate()
是最好的选择。如果您处于API11+环境中,则应首选此方法。如果您在API 10或以下版本中,请仍然可以检查当前版本并调用上面的代码片段。(请不要忘记为Ralf的答案投票!)
在SDK 11之前,实现此操作的方法如下:
public void reload() {
Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
finish()
和 startActivity()
之后分别调用 overridePendingTransition(0, 0);
,而不是在你调用它的地方... - cawoverridePendingTransition()
的文档。 - Alex Lockwood仅仅是为了结合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上使用recreate()
。
代码:
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());
}
}
}
这绝对是重新启动当前活动最简单的方法:
finish();
startActivity(getIntent());
我不明白为什么没有人提到Intent.makeRestartActivityTask()
,它能够干净地实现这个目的。
创建一个 Intent,可用于重新启动应用程序任务并将其置于基本状态。
startActivity(Intent.makeRestartActivityTask(getActivity().getIntent().getComponent()));
这种方法将 Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
设置为默认标志。
这个解决方案对我有效。
首先完成活动,然后再重新启动它。
示例代码:
public void restartActivity(){
Intent mIntent = getIntent();
finish();
startActivity(mIntent);
}
调用这个方法
private void restartFirstActivity()
{
Intent i = getApplicationContext().getPackageManager()
.getLaunchIntentForPackage(getApplicationContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity(i);
}
谢谢。
尽管此问题已经有多个答案,但如果要从片段中重新启动一个活动,则可以像这样进行:
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
,如果在奇怪的地方调用它,它会简单地杀死活动而不重新启动它。
欢迎提出任何问题。
祝好, Chris
recreate()
进行重新加载或重新启动 Activity。 - Akash Attal