我有两组活动假设每组3个活动,(A1,B1,C1 || A2,B2,C2)我从A1开始我的应用程序然后 - > B1 - > C1这里我想从C1跳到 - > A2和A2,如果我按回它应该存在应用程序而不是让我回到C1,然后从A2我导航到 - > B2 - > C2。
所以基本上我想改变起始活动,就像我在一个应用程序中有两个应用程序,当我转到第二个应用程序时,我必须清除活动堆栈。那可能吗?任何想法?
答案 0 :(得分:1)
在我看来,你已经回答了自己的问题。你写道:
所以基本上我想改变起始活动,就好了 我在一个应用程序中有两个应用程序,当我转到第二个应用程序时,我必须 清除活动堆栈。
我会这样做:
创建DispatcherActivity
,这是在启动应用程序时启动的活动。此活动是您的任务的根活动,负责启动A1或A2,取决于...而不是自己调用finish()
(即:它将被A1或A2覆盖,但仍然位于活动堆栈。)
在A1
中,捕获“后退”键并告诉DispatcherActivity退出如下:
@Override
public void onBackPressed() {
Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("exit", "true");
startActivity(intent);
}
这会将任务堆栈清除为根活动(DispatcherActivity
),然后再次使用此意图启动DispatcherActivity
。
在C1
中,要启动A2
,请执行以下操作:
Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);
这会将任务堆栈清除为根活动(DispatcherActivity
),然后再次使用此意图启动DispatcherActivity
。
在DispatcherActivity
中,在onCreate()
中,您需要根据意图中的额外内容确定要执行的操作,如下所示:
Intent intent = getIntent();
if (intent.hasExtra("exit")) {
// User wants to exit
finish();
} else if (intent.hasExtra("A2")) {
// User wants to launch A2
Intent a2Intent = new Intent(this, A2.class);
startActivity(a2Intent);
} else {
// Default behaviour is to launch A1
Intent a1Intent = new Intent(this, A1.class);
startActivity(a1Intent);
}
在A2
中,捕获“后退”键并告诉DispatcherActivity使用与onBackPressed()
中相同的A1
覆盖退出。
注意:我刚输入此代码,所以我没有编译它,它可能不完美。您的里程可能会有所不同; - )
答案 1 :(得分:0)
如果要在按后退按钮而不是返回上一个活动时关闭应用程序,则应覆盖后退按钮。在overwrite方法中,在关闭活动后调用finish()方法。我希望这对你有帮助。
编辑:
检查以下链接:这是用于关闭视图堆栈中的所有活动。在关闭你的应用程序之前关闭所有活动。
http://www.coderzheaven.com/2011/08/27/how-to-close-all-activities-in-your-view-stack-in-android/
答案 2 :(得分:0)
您可以检查在活动A2中按下按钮的时间,然后检查其后退按钮是否可以关闭应用程序。您可以在A2
中使用以下方法@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
this.finish();
}
return super.onKeyDown(keyCode, event);
}
答案 3 :(得分:0)
尝试使用此意图启动活动A2 - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
答案 4 :(得分:0)
使用onBackPressed处理此方法并完成方法。
在启动其他活动之前,最好使用finish()方法关闭当前活动。
如果您想在后退时转到上一个活动,请覆盖onBackPressed方法并调用特定意图。
在A2活动中,在onBackPressed方法中添加finish方法(不要在此处调用以前的活动)。这是其中一种方式。
答案 5 :(得分:0)
将Intent从活动C1传递到A2时用作
Intent intent=new Intent(C1.this,A2.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
和你的活动A2覆盖后退按钮
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
A2.this.finish();
}
return super.onKeyDown(keyCode, event);
}
答案 6 :(得分:0)
FLAG_ACTIVITY_CLEAR_TOP
不是您想要的。
我想你正在寻找:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);