回到Activity但不重新创建(不调用onCreate())

7
我想提出一个类似的问题:如何在不创建新实例的情况下返回到上一个屏幕,但我不希望 Activity A 经历 onCreate 回调,我想返回到同一状态下的上一个实例。如何做到这一点而不调用多个 finish()?以下是相关问题的链接:Go back to previous screen without creating new instance

如果是一个backPress和/或根据该活动的新实例,您可以尝试设置一个标志并在onCreate中检查它以绕过它。 - D Agrawal
2个回答

13

在应用程序导航时,无需finish()活动。相反,您可以维护活动返回堆栈并仍然实现目标。假设您有以下4个活动:

A --> B --> C --> D

其中D是最顶层的活动,A是根活动。如果您要返回到活动B,则需要执行两个操作以避免触发B的onCreate方法。

1.) 将B设置为"SingleTask"活动。您可以在Android清单中执行此操作。简而言之,这意味着该任务中只会存在一个B的“实例”。如果在调用B时已经运行,则它将被带到前台。下面是如何执行此操作:

  <activity
        android:name=".ui.MyActivity"
        android:launchMode="singleTask"/>

但您不只是想将B带到最前面。您希望“回退”到B,以便您的堆栈看起来像

A--> B

2.) 将此标记添加到启动B的意图中。这可以确保C和D被删除。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

现在当'D'调用新的Intent到B时,B将被恢复,并且C和D将被移除。B不会被重新创建,它只会调用onNewIntent。


0
当从A到B时,不要结束Activity A。 当从B到C时,结束Activity B。 当从C到D时,结束Activity C。
所以,无论从哪里导航回来都要完成当前的Activity,然后Activity A将会被恢复而不是重新创建。

很遗憾,我不能做到这一点,因为流程是这样的: 仪表板 -> 物品详情 -> 物品编辑 -> 物品删除(是/否),除非发生删除,否则所有内容都应该保留。 - Adam Styrc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接