2

我在活动 A 然后我从 A 开始活动 B。现在我在活动 B 并从 B 开始活动 C。在开始活动 C 时,我想删除活动 A 和 B。我试过这种方式

Intent intent = new Intent(B.this, C.class); //I'm on Activity B, moving to C
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //this should remove the Activity A
startActivity(intent);
finish(); //Finishes activity B

我担心这样做,当我的活动 C 开始时,我按下回,应用程序应该退出。目前它向我展示了活动 A。

4

5 回答 5

5

你不能这样做。启动 C 时需要finish()A。我最喜欢的方法如下:

在 B 中,当您要启动 C 时,请执行以下操作:

Intent intent = new Intent(B.this, A.class); //Return to the root activity: A
intent.putExtra("launchActivityC", true);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //this will clear the entire task stack and create a new instance of A
startActivity(intent);

这将清除整个任务堆栈(即:完成活动 B 和 A)并创建活动 A 的新实例。

现在,在onCreate()活动 A 中,执行此操作(在调用 之后super.onCreate()):

if (getIntent().hasExtra("launchActivityC")) {
    // User wants to launch C now and finish A
    Intent intent = new Intent(this, C.class);
    startActivity(intent);
    finish();
    return; // Return immediately so we don't continue with the rest of the onCreate...
}

您正在做的是将您的根活动 A 用作一种“调度程序”。

于 2013-11-08T11:44:38.980 回答
1

Intent.FLAG_ACTIVITY_CLEAR_TOP您可以在意图中添加标志以删除顶级活动。

示例代码如下。

Intent intent = new Intent(getApplicationContext(), Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2013-11-08T11:41:05.367 回答
0

请添加 intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);以删除您的堆栈历史记录。

于 2013-11-08T11:37:38.487 回答
0

试试这个,

Intent i = new Intent(activityContext, ActivityName.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
于 2013-11-08T11:42:11.553 回答
0

在开始新活动之前添加此标志

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)

这将从堆栈顶部清除 Activity

于 2015-11-02T10:26:04.530 回答