【问题标题】:How to close all previous Android actvitities except the first one?如何关闭除第一个之外的所有以前的 Android 活动?
【发布时间】:2021-12-12 13:37:23
【问题描述】:

考虑一个假设的电子银行应用程序,其流程如下:

HomeActivity -> CurrencyConverterActivity -> PickContactActivity -> InputDataTransferActivity -> TransferReviewActivity -> TransferConfirmationActivity

所有活动(HomeActivity 除外)都使用通常的startActivity() 调用,而没有finish()。 这是有意的,因此用户可以查看前一个屏幕上的输入。但是一旦你到达 TransferConfirmationActivity 并按回,我想回到 HomeActivity(其他活动被杀死)。

如何做到这一点?

【问题讨论】:

  • 使用 startActivityForResult() 启动所有活动。在 TransferConfirmationActivity 中,将 putExtra 添加到您用于 finish() 的意图中,表明接收活动也必须关闭。

标签: android android-activity


【解决方案1】:

我认为您可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP 标志来实现这一点。

Android DocumentationFLAG_ACTIVITY_CLEAR_TOP

如果设置,并且正在启动的活动已经在 当前任务,而不是启动该任务的新实例 活动,除此之外的所有其他活动都将关闭,并且 此 Intent 将作为 新意图。

val intent = Intent(this, HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)

【讨论】:

    【解决方案2】:

    启动 HomeActivity 并在 Intent 中添加标志

    Intent intent = new Intent(activity, HomeActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    

    【讨论】:

      【解决方案3】:

      TransferConfirmationActivity 中覆盖onBackPressed() 并返回到HomeActivity,如下所示:

      Intent intent = new Intent(this, TransferConfirmationActivity.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                      Intent.FLAG_ACTIVITY_SINGLE_TOP);
      startActivity(intent);
      finish();
      

      这会将用户返回到HomeActivity 的现有实例,同时从堆栈中删除所有其他活动。

      如果您希望创建 HomeActivity 的新实例并返回到该实例,只需删除标志 Intent.FLAG_ACTIVITY_SINGLE_TOP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2017-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多