【问题标题】:How to "destroy" multiple Android activities at same time如何同时“销毁”多个 Android 活动
【发布时间】:2012-09-24 14:03:02
【问题描述】:

我在应用程序中有一个向导,通过 6 个活动。

所以我打电话:

主要活动 - 看涨期权 1 - 看涨期权 2 - 调用选项 3 - 调用选项 4 - 调用选项 5

现在,在选项 5 上,我将整个操作保存到数据库,此时我需要返回主活动并销毁选项 1、2、3、4 和 5。

在选项 5 保存到数据库之前,我需要能够返回,进行更改,然后转到选项 5 并保存它。

我以某种方式创建的方法是正确的做法:

private void cleanStack(){
   Option1.finish();
   Option2.finish();
   Option3.finish();
   Option4.finish();
   Option5.finish();
}

然后开始(或恢复)主要活动?

Tnx

【问题讨论】:

  • 你为什么把它作为一堆活动来实现?对我来说,向导是一个单一的活动,使用ViewFlipper 或片段事务来实现向导的不同阶段。见:stackoverflow.com/a/4758715/115145
  • 因为我是菜鸟,我花了 3 天时间找出片段,而且我的截止日期很短,所以我选择实际部署产品,因为我知道它远非最佳实践,但那是不切实际的最后期限。

标签: android android-activity android-lifecycle


【解决方案1】:

使用以下方法清除堆栈:

Intent intent = new Intent ( this , MainActivity.class );
intent.addFlags ( Intent.FLAG_ACTIVITY_CLEAR_TOP );
startActivity ( intent );

以这种方式,因为在堆栈中你有: 主活动 -> 调用选项 1 -> 调用选项 2 -> 调用选项 3 -> 调用选项 4 -> 调用选项 5

如果您使用 clear top 标志启动 MainActivity,则堆栈中位于 MainActivity 顶部的所有活动都将完成。

【讨论】:

    【解决方案2】:

    我要做的是,而不是完成所有活动,而是创建一个 Intent 来回调您的 MainActivity。

    使用setFlags 方法将此Intent 赋予FLAG_ACTIVITY_CLEAR_TOP

    这将检查您的堆栈以查看 MainActivity 的实例是否已经存在,如果存在,它将将该 Activity 带到前面并清除其上方的所有 Activity,而不是重新启动 MainActivity 并将其放在堆栈顶部.

    如果 MainActivity 需要选项 1-5 中的信息,您可能需要刷新数据,因为 CLEAR_TOP 在大多数情况下会将 MainActivity 的旧实例置于焦点而不是完全重新创建它(onCreate 不会被调用,但onStartonResume 会)。

    这是 Intent 类上的documentation。如果您遇到困难,还有其他标志可以帮助您导航。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多