我有两组 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 覆盖退出。

注意:我刚刚输入了这段代码,所以我没有编译它,它可能并不完美。你的旅费可能会改变 ;-)

10-08 03:39