【问题标题】:setResult works MOST of the timesetResult 大部分时间都有效
【发布时间】:2014-10-03 21:55:36
【问题描述】:

我已经使用 setResult(RESULT_OK, intent) 有一段时间了,现在遇到了一些奇怪的事情。

大部分时间,大约 3/4 的时间我进入一个活动然后使用以下代码退出它,该代码总是执行:

Intent intent = new Intent();   
intent.putExtra(KEY_ENVIRONMENT_SURVEY, esurvey);       
setResult(RESULT_OK, intent);   
finish();

在返回的活动中,大多数时候返回RESULT_OK,但有时返回RESULT_CANCELLED,看起来很随机。这可能是什么原因造成的?是否可以在附加调查之前调用完成()(它是可打包的)并且默认为 RESULT_CANCELLED?如果是这样,我该如何解决?使用处理程序并使用 postDelayed 或检查是否设置了 RESULT_OK(我不知道该怎么做,所以请说明这是否是解决方案)?

谢谢!

【问题讨论】:

  • "如果子活动因任何原因(如崩溃)失败,父活动将收到代码为 RESULT_CANCELED 的结果。" developer.android.com/reference/android/app/Activity.html
  • 是的,但是大多数时候该活动都在做它应该做的事情(从我所看到的 logcat 中没有什么不寻常的)。我想我需要进一步调查,看看这是否是原因。

标签: android start-activity activity-finish


【解决方案1】:

尝试将此代码移动到覆盖的finish() 方法中。这将确保每次活动完成时都会调用它。

@Override
public void finish() {
    Intent intent = new Intent();   
    intent.putExtra(KEY_ENVIRONMENT_SURVEY, esurvey);       
    setResult(RESULT_OK, intent);   
    super.finish();
}

【讨论】:

  • 我会试试这个。您认为这些代码行中的任何内容都可能导致 Activity 崩溃吗?
  • @TomMcFarlin 不,他们是安全的。
【解决方案2】:

我正在重新审视这个问题,因为我在我的应用程序中发现了问题。 “返回”按钮非常接近我指定为移动到下一个活动的按钮。我允许在第一次按下按钮后注册,所以有时活动似乎通过触摸“完成”按钮完成,但实际上是通过“返回”按钮导航回。

我使用布尔标志修复了这个问题,在按下按钮时检查它是否为真,如果等于假,则将其设置为真。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2013-07-12
    相关资源
    最近更新 更多