如何同时结束两个活动(Activities)?

10

我正在为小孩子编写一款学习数学的应用程序。它首先会提示用户选择他们想要的问题类型(MainActivity),然后展示一系列问题(QuestionsActivity)。在回答完10个问题之后,它会告诉你哪些题目回答正确,哪些回答错误(ResultsActivity)。

我知道Android将所有活动都放在一个堆栈中。在我的情况下,它看起来像这样:

ResultsActivity
QuestionsActivity
MainActivity

当您调用finish时,一个活动将从堆栈中弹出。我希望在ResultsActivity中有一个返回主菜单的按钮,以返回MainActivity。但是,如果我在ResultsActivity中调用finish,用户将看到QuestionsActivity!那么我该如何在这两个活动上调用finish

2个回答

12

两种选项:

  1. 在 QuestionsActivity 中调用 finish() ,在调用 start 去启动 ResultsActivity 后。这样可以将它从栈中移除,以便从 ResultsActivity 返回时按下返回键会回到 MainActivity。
  2. 在意图中使用 Intent.FLAG_ACTIVITY_CLEAR_TOP ,以返回到 MainActivity。这将清除所有在其上方的活动。

6
你可以通过重新启动MainActivity,并使用以下标志清除堆栈来清除堆栈:
  final Intent intent = new Intent(context, MainActivity.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(intent);

4
使用FLAG_ACTIVITY_CLEAR_TOP代替启动一个新任务,因为它更高效。 - Gergely Kőrössy
谢谢,知道这个真好。 :) - Christopher
但是,如果用户在ResultsActivity中按下返回按钮,它仍然会回到QuestionsActivity,对吗? - Sweeper
2
重写 onBackPressed() 方法,使用 FLAG_ACTIVITY_CLEAR_TOP 标志启动 MainActivity - Gergely Kőrössy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接