我有两套活动假设3个活动各一套,(A1,B1,C1 || A2,B2,C2),我开始我的应用程序从A1然后 - > B1 - 在这里> C1我想从C1跳到 - > A2在A2如果我按回到它应该存在于应用程序,而不是把我带回了C1,然后从A2我浏览到 - > B2 - > C2。
因此,它基本上是我想改变的开始活动,这就像我在一个应用两个应用程序,当我翻到第二应用我要明确活动堆栈。 那可能吗? 有任何想法吗?
我有两套活动假设3个活动各一套,(A1,B1,C1 || A2,B2,C2),我开始我的应用程序从A1然后 - > B1 - 在这里> C1我想从C1跳到 - > A2在A2如果我按回到它应该存在于应用程序,而不是把我带回了C1,然后从A2我浏览到 - > B2 - > C2。
因此,它基本上是我想改变的开始活动,这就像我在一个应用两个应用程序,当我翻到第二应用我要明确活动堆栈。 那可能吗? 有任何想法吗?
在我看来,你已经回答了你自己的问题。 你写了:
因此,它基本上是我想改变的开始活动,这就像我在一个应用两个应用程序,当我翻到第二应用我要明确活动堆栈。
我会做这种方式:
创建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
。
注:我刚才输入这个代码,所以我没有编译它,它可能不是完美的。 你的旅费可能会改变 ;-)
您可以检查时被压在活动A2,然后如果它的返回按钮,您可以关闭应用程序的按钮。 您可以使用A2以下方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
this.finish();
}
return super.onKeyDown(keyCode, event);
}
尝试用这种意图开展活动A2 - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
处理这种使用onBackPressed和完成方法。
启动其他活动之前,你最好使用面漆()方法关闭当前的活动。
如果你想要去的背压以前的活动,覆盖onBackPressed方法,并调用特定的意图。
在A2的活性,加入onBackPressed方法完成方法(这里不调用之前的活动)。 这是方式之一。
同时使从意图活动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);
}
如果要在按关闭您的应用程序返回按钮,而不是回到过去的活动,你应该覆盖的后退按钮。 在覆盖方法调用完成()关闭活动之后方法。 我希望这可以帮助你。
编辑:
检查下面的链接:这是在你看来栈关闭所有活动。 关闭之前您的应用程序关闭所有活动。
http://www.coderzheaven.com/2011/08/27/how-to-close-all-activities-in-your-view-stack-in-android/
FLAG_ACTIVITY_CLEAR_TOP
是不是你在找什么。 我认为你正在寻找:
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);