【问题标题】:Android clear back stack between activitiesAndroid清除活动之间的回栈
【发布时间】:2017-08-11 17:13:00
【问题描述】:

我有 4 个活动:活动 A -> 活动 B -> 活动 C -> 活动 D 而我想要实现的是从D回到A并清除B和C。这可能吗?怎么样??

非常感谢。

【问题讨论】:

  • 你不想让Activity B和C在后栈中?
  • 如果你永远不会从 D 回到 B 和 C,不要将 B 和 C 保存在后堆栈中,这样,当你按 D 时,你会直接跳到 A。你必须回到 B 或 C 吗?如果没有,我可以为您提供解决方案。

标签: android android-activity stack


【解决方案1】:

如果正在启动的 Activity 已经在当前任务中运行,那么不会启动该 Activity 的新实例,而是关闭它之上的所有其他 Activity,并且此 Intent 将被传递到(现在顶部)作为新意图的旧活动。

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

Read more here.

【讨论】:

    【解决方案2】:

    如果活动顺序是固定的(A=>B=>C=>D=>A),那么在启动 Activity C 活动之前,您需要调用 B 的完成,并且在启动 Activity D 时调用活动 C 的完成。

    startActivityC() 
    {
        Intent intent = new Intent(this, C.class);
        ActivityB.this.finish()
        startActivity(intent);
    }
    

    从activity D 到启动Activity A 可以覆盖ActivityD 的onBack 来启动Activity A

    @Override
    onBack()
    {
    
        Intent intent = new Intent(this, A.class);
    
        ActivityD.this.finish()
        startActivity(intent);
    }
    

    【讨论】:

    • IMO,这种方法一点也不优雅。
    【解决方案3】:

    如果您的流程始终遵循 A => B => C => D => A,则您只需避免将 B 和 C 保存在后堆栈中。这样,当你从 D 回去时,唯一可用的Activity 是 A。

    代码开始ActivityB&C:

    Intent i = new Intent(...);
    i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); // <= Don't save in back stack
    startActivity(i);
    

    代码开始ActivityA&D:

    Intent i = new Intent(...);
    startActivity(i);
    

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2013-08-16
      • 2012-09-19
      • 2015-05-13
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多