我的应用程序中有以下活动堆栈: 活动A - >活动B
通常如果应用程序显示活动B,按后退按钮将返回A.这很好。现在我在活动B中有一个按钮,它基本上终止了整个应用程序,因为我希望用户能够在任何给定活动中终止应用程序。当我按下按钮时,我希望应用程序终止所有活动并返回主屏幕。
但是,由于我在堆栈中有活动,在活动B中调用finish()只会返回到A.我应该如何实现它以便活动A也将被销毁?如果从A创建活动B,我仍然希望在堆栈中保留活动A.
这是我的代码,但我认为它不会有太多帮助:
活动A中的按钮
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setText("Start ActB");
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
});
}
活动B中的按钮
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setText("Finish");
b.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
答案 0 :(得分:1)
为了清除ActivityA之上的所有活动,你应该做这样的事情。
Intent intent = new Intent(getApplicationContext(), ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
要重新启动您的应用,您应该执行以下操作:
Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
要在ActivityB中关闭app按钮,您应该使用:
System.exit(0);
答案 1 :(得分:0)
您可以设置活动launchMode和clearTaskOnLaunch标志
供参考:http://developer.android.com/guide/topics/manifest/activity-element.html
答案 2 :(得分:0)
我找到了解决问题的方法:同时使用startActivityForResult()
,setResult()
和onActivityResult
。
这就是我所拥有的:
ActivityA:
public static final int RESULT_CODE_FINISH = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setText("Start ActB");
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), ActivityB.class);
startActivity(intent);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case RESULT_CODE_FINISH:
this.finish();
break;
default:
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
ActivityB:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setText("Finish");
b.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(ActivityA.RESULT_CODE_FINISH);
finish();
}
});
}