我如何重新启动一个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();
}
当前回答
我想知道为什么没有人提到Intent.makeRestartActivityTask(),它清楚地说明了这个确切的目的。
创建一个可以用来重新启动应用程序任务的Intent *在它的基态。
startActivity(Intent.makeRestartActivityTask(getActivity().getIntent().getComponent()));
这个方法设置Intent。|意图。FLAG_ACTIVITY_CLEAR_TASK作为默认标志。
其他回答
在SDK 11之前,这样做的方法是这样的:
public void reload() {
Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
我使用了这段代码,所以我仍然可以支持旧的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());
}
}
}
我的主题切换是这样的:
Intent intent = getIntent();
finish();
startActivity(intent);
基本上,我首先调用finish(),并且我使用的是这个活动开始时的完全相同的意图。这似乎奏效了?
更新:正如Ralf在下面指出的,activity . rebuild()是API 11及以后的发展方向。如果您在API11+环境中,这是可取的。如果您在API 10或以下,您仍然可以检查当前版本并调用上面的代码片段。(请不要忘记为拉尔夫的答案投票!)
调用这个方法
private void restartFirstActivity()
{
Intent i = getApplicationContext().getPackageManager()
.getLaunchIntentForPackage(getApplicationContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity(i);
}
谢谢,
我就是这么做的。
val i = Intent(context!!, MainActivity::class.java)
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i)