【问题标题】:Traverse between activities in stack在堆栈中的活动之间遍历
【发布时间】:2016-08-23 12:16:56
【问题描述】:

假设我在堆栈中有活动 A、B、C 的活动实例 A1、B1、A2、B2、C1。如何从 C1 遍历到 Activity 实例 B1?

让我们概括一下,在 B1 和 C1 之间会有“n”个活动。

我不想从 C1 创建 B 的新实例。

【问题讨论】:

标签: android android-activity


【解决方案1】:

这实际上是一个非常糟糕的 Android 架构。如果您在Activity 上创建多个实例,则无法具体解决它们,例如:“回到ActivityB 的第一个实例”。 Android 不是这样设计的。

您应该避免创建Activity 的多个实例。最好使用同一个实例,然后通过交换基础数据并可能在显示器上添加状态转换来创建多个实例的“错觉”,这样看起来你正在开始另一个Activity

另一种可能的解决方案是使用大量startActivityForResult() 并将信息返回给调用Axctivity 关于下一步做什么。

更多详情请看(虽然这些问题是专门针对使用FLAG_ACTIVITY_REORDER_TO_FRONT,但问题还是基本一样):

【讨论】:

  • '最好使用同一个实例并通过交换基础数据来创建多个实例的“错觉”'-如何使用相同的活动实例?你可以解释吗?谢谢。
  • 为了让我帮助您,您需要解释为什么要创建同一个Activity 的多个实例。举一个应用程序中的导航示例。不要在评论中这样做。只需编辑您的原始帖子并在最后添加更多详细信息。
  • 我只是对堆栈中的遍历感到好奇。所以我无法在应用程序中提供导航详细信息。让我想一个场景然后回来。
  • 您应该重新架构您的应用程序,这样您就不会打开Activity 的多个实例。不要打开Activity 的新实例,而是返回现有实例并为其提供新数据以显示。您可以重新排列活动堆栈,但如果堆栈中有多个相同Activity 的实例,这将不再有效,因为您无法告诉 Android 返回(或置于前面)特定于 给定Activity. 的实例
  • 我现在明白了。难以理解最好使用同一个实例并通过交换底层数据来创建多个实例的“错觉”。感谢您的回答。
【解决方案2】:

使用带有意图的标志。

官方文档:https://developer.android.com/guide/components/tasks-and-back-stack.html

将标志与 Intent 一起传递

FLAG_ACTIVITY_CLEAR_TOP

您还可以根据需要在单个 Intent 中 paas 多个 FLag。

希望这会有所帮助。

【讨论】:

  • 其实这行不通。它会将任务清除回 B2,而不是 B1。 OP 在堆栈中拥有每个Activity 的多个实例,他希望能够返回到特定的实例。
猜你喜欢
  • 2016-08-13
  • 1970-01-01
  • 2014-06-05
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多