finish()的替代方法,用于从视图中删除Activity。

时间:2011-09-06 07:03:07

标签: android android-activity

目前我有一个主活动,其中有许多按钮指向其他屏幕,这些按钮将允许用户建立许多搜索条件。搜索条件通过意图上的附加内容传递回主要活动。

子活动以StartActivityForResult启动,然后当用户做出选择时,我调用finish()返回主屏幕。

但是我现在想要将子活动保留在内存中,以便用户可以返回,查看他们输入的内容并调整搜索条件,而不是从头开始重新输入。如何在不丢失子活动状态的情况下交换回主要活动?

谢谢,

2 个答案:

答案 0 :(得分:2)

从您的描述中看起来主要活动接收来自所有子活动的数据。听起来这个数据足以恢复每个子动作的状态。

您可以使用Intent中已知的搜索条件启动子行为。因此,每个子行为都可以从onCreate()的意图恢复其状态。

以下是一系列事件:

  1. 应用程序启动,主要活动开始。
  2. 用户按下按钮:主要活动 - >意图() - >子活动
  3. 用户完成的搜索条件:
    子活动返回 - >意图(搜索条件) - >主要活动
  4. 用户按下按钮:主要活动 - >意图(搜索条件) - >子活动
  5. 因此,在第4步,主要活动将通过第3步收到的状态。

答案 1 :(得分:1)

Yuo应该使用android意图标志。使用标志 FLAG_ACTIVITY_REORDER_TO_FRONT

如果在传递给Context.startActivity()的Intent中设置,则此标志将导致已启动的活动在其任务的历史堆栈中已经运行时被带到其前面。

例如,考虑一个由四个活动组成的任务:A,B,C,D。如果D调用具有解析为活动B的组件的Intent的startActivity(),则B将被带到前面历史堆栈,使用此结果顺序:A,C,D,B。如果还指定了FLAG_ACTIVITY_CLEAR_TOP,则将忽略此标志。

在活动之间传递数据的另一种方法是扩展Application类。因此,在每个活动中,您都可以使用

访问它
MyApplication myApp = (MyApplication) getApplicationContext();

您可以将搜索条件设置为此类中的属性。您可以从任何活动访问应用程序上下文。