【问题标题】:Go back to Activity without recreating (without invoking onCreate())返回 Activity 而不重新创建(不调用 onCreate())
【发布时间】:2016-04-13 13:19:39
【问题描述】:

我想问类似的问题:

Go back to previous screen without creating new instance

但是我不希望 Activity A 通过 onCreate 回调,我想以相同的状态返回到前一个实例。如何在不调用多个 finish() 的情况下实现这一点?

【问题讨论】:

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

标签: android android-lifecycle android-navigation


【解决方案1】:

当您浏览应用程序时,无需完成()活动。相反,您可以维护您的 Activity 回栈并仍然实现您的目标。假设您有 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' 向 B 调用新 Intent 时,B 将被恢复,C 和 D 将被移除。 B 不会被重新创建,它只会调用 onNewIntent。

【讨论】:

    【解决方案2】:

    从 A 导航到 B 时,不要完成活动 A。 当从 B 导航到 C 时,完成活动 B。 当从 C 导航到 D 完成 Activity C。

    因此,无论您从何处返回完成当前活动,活动 A 将再次获得恢复,而不是创建。

    【讨论】:

    • 不幸的是我做不到,因为流程是:仪表板->项目详细信息->项目版本->项目删除(是/否),除非发生删除,否则所有内容都应该保留
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多