我有两组 Activity ,假设每组有 3 个 Activity ,(A1,B1,C1 || A2,B2,C2) 我从 A1 开始我的应用程序然后 -> B1 -> C1 在这里我想从 C1 跳转到 -> A2在 A2,如果我按回它应该存在应用程序而不是让我回到 C1,然后从 A2 我导航到 -> B2 -> C2。
所以基本上我想更改起始 Activity ,就像我在一个应用程序中有两个应用程序一样,当我翻转到第二个应用程序时,我必须清除 Activity 堆栈。那可能吗?有任何想法吗?
最佳答案
在我看来你已经回答了你自己的问题。你写了:
我会这样做:
创建一个 DispatcherActivity
,它是应用程序启动时启动的 Activity 。此 Activity 是您任务的根 Activity ,负责启动 A1 或 A2,具体取决于...而不是调用 finish()
本身(即:它将被 A1 或 A2 覆盖,但仍位于 Activity 堆栈的根) .
在 A1
中,捕获“back”键并告诉 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);
}
这会将任务堆栈清除到根 Activity (
DispatcherActivity
),然后以该 Intent 再次启动 DispatcherActivity
。在
C1
中,要启动 A2
,请执行以下操作:Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);
这将清除任务堆栈到根 Activity (
DispatcherActivity
),然后以这个 Intent 再次启动 DispatcherActivity
。在
DispatcherActivity
中,在 onCreate()
中,您需要根据 Intent 中的附加内容确定要执行的操作,如下所示: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
中,捕获“back”键并告诉 DispatcherActivity 使用与 onBackPressed()
中相同的 A1
覆盖退出。注意:我刚刚输入了这段代码,所以我没有编译它,它可能并不完美。你的旅费可能会改变 ;-)