【问题标题】:Activity back tracking in Activity stack - Android活动堆栈中的活动回溯 - Android
【发布时间】:2016-09-01 09:01:06
【问题描述】:

我有两个活动,活动 A 和活动 B。

活动 A 启动活动 B。

所以,一些交互后的活动堆栈将看起来像 A -> B -> A -> B。

问题: 我需要从活动B(堆栈中的最后一个B)进入堆栈中的第一个活动A。我正在使用 FLAG_CLEAR_TOP 以及 Intent.FLAG_ACTIVITY_NEW_TASK 来实现相同的目标。

现在,活动 A(堆栈位置 3)将从活动 B 中显示,但是当我按下返回按钮时,活动 B 将再次显示(因为活动 B(堆栈位置 2)已经在堆栈中)。

我该如何解决这个问题?

PS:我尝试对活动 A 和 B 使用 launchMode singleInstance 和 singleTask,但该解决方案不适用于我的应用程序。

提前致谢。

【问题讨论】:

  • 如何从第一个活动 B 到第二个活动 A?
  • 我正在使用 Intent.FLAG_ACTIVITY_NEW_TASK 导航到第二个活动 A
  • 删除 FLAG_ACTIVITY_NEW_TASK 可能已经解决了您的问题,但我不确定。为什么不在第一个活动 B 中调用 finish 离开该活动?然后你自动回到A,这是你的第一个A
  • 您是否在清单中指定活动 B 作为活动 A 的父级?这可能是您的问题的原因
  • @AntonMalmygin。不,我没有在清单中将 B 指定为 A 的父活动。

标签: android android-activity


【解决方案1】:

切换活动后添加finish ();

Intent intent = new Intent (activity_a.this, activity_b.class);
startActivity(intent);
finish ();

【讨论】:

    【解决方案2】:

    尽可能避免创建多个活动实例。如果堆栈中有同一个 Activity 的多个实例,Android 的设计不允许您识别(并返回)堆栈中 Activity 的特定实例。

    根据您的应用程序,有不同的方法可以解决问题。

    一种可能对您有用的方法是使用<activity-alias>,它允许您以另一个名称重用现有的Activity 实现。

    另一种方法是创建另一个 Activity 类,它只是从原始类继承,这样您就有 2 个代码完全相同但名称不同的类。

    最好的方法是重新构建您的应用程序,以便您在任何给定时间都只有一个 Activity 的实例。您可以通过使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 重新排列任务堆栈来做到这一点。

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2017-10-02
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多