【问题标题】:return back and skip one activity android onbackpressed返回并跳过一项活动 android onbackpressed
【发布时间】:2014-01-07 00:55:58
【问题描述】:

这是我的情况 假设我有这些活动 A -> B -> C -> D

当用户在 D 中单击后退按钮时,我想回到 A 但我也想在用户点击 C 的后退按钮时回到 B

当我从 B 到 C 时,我想调用完成,但是在这种情况下,如果我单击 C 的背面,我将无法返回到 B

如何在不针对两个活动调用 onBackPressed 的情况下解决此问题?

谢谢

【问题讨论】:

标签: android android-activity return back activity-finish


【解决方案1】:

当您开始每个活动时,您将需要使用

startActivityForResult()

然后有一个标志系统,说明谁被阻止,哪些被传回。所以,活动 D:

timeToEnd() {
    setResult(RESULT_D_CLOSING);
    finish();
}

然后在 A、C、D 中

onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(resultCode)
    case RESULT_D_CLOSING:
        // Close on upwards
        setResult(RESULT_D_CLOSING);
        finish();
    case ....
        // You get the idea
    }
}

【讨论】:

    【解决方案2】:

    您是否尝试过在您的意图中使用 FLAG_ACTIVITY_CLEAR_TOP 标志(用于从“D”开始“A”)?

    http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

    如果设置了,并且正在启动的 Activity 已经在当前任务中运行,那么不会启动该 Activity 的新实例,而是关闭它之上的所有其他 Activity,并且此 Intent 将被传递到(现在在顶部)作为新 Intent 的旧活动。

    【讨论】:

      【解决方案3】:

      这里有 2 个选项。您可以使用startActivityForResult 启动活动,然后每个活动的onBackPressed 传递一个标志,告诉活动退出保持打开状态。

      另一种选择是将 A、B、C、D 实现为同一活动中的片段,在您打开它们时将所有片段放在后台堆栈中,然后 onBackPress 您可以以编程方式循环遍历后台堆栈以查看您的内容想做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-31
        • 1970-01-01
        相关资源
        最近更新 更多