【问题标题】:onActivityResult doesn't work?onActivityResult 不起作用?
【发布时间】:2017-08-25 12:15:13
【问题描述】:

我面临与 startActivityForResult() 相关的问题

从 FirstActivity 启动 SecondActivity :

Intent intent = new Intent();
intent.setClass(FirstActivity.this, SecondActivity.class);
intent.putExtra("key1", "12345");
startActivityForResult(intent, 0);

并处理结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //TODO handle here. 
}

从 SecondActivity 向 FirstActivity 发送消息:

在 SecondActivity 中:

setResult(0);

我无法处理 FirstActivity 中 onActivityResult 的结果。 它永远不会适用于我的应用程序。

我的操作系统是:1.5

这里有什么问题?

【问题讨论】:

  • 完成第二个活动后会发生什么?回调方法onActivityResult()是否被调用?
  • 感谢回复,我正在努力让它保持第二个活动,第一个活动将完成。有可能吗?

标签: android


【解决方案1】:

startActivityForResult 用于您想要选择一段数据,或执行您的Activity 或应用程序无法执行的某种操作的情况。

例如,您想选择一个联系人,因此您启动联系人应用程序,用户选择他们想要的人,然后您会收到结果。或者您想拍照,因此您启动相机应用程序并要求它在完成后将照片发送给您。此操作与您调用startActivityForResult 的第一个活动完全分开。

Activity 完成之前,您正在启动的Activity 不会向您发送结果,即调用finish()

所以在您的情况下,您需要在SecondActivity 中调用它:

setResult(...);
finish();

FirstActivity 之前将在其onActivityResult 方法中接收结果。当然,这意味着SecondActivity 现在已经消失了,FirstActivity 再次成为栈顶。


无法将结果发送到FirstActivity,然后在保持SecondActivity 仍处于活动状态时将其关闭。在这种情况下,您应该只处理 SecondActivity 中的任何“结果”,或者将其发送到您定义的 Service 以进行您想要的任何处理。

【讨论】:

  • 我的代码有一些问题...... onActivityResult 没有被调用......最后发现我正在使用 startActivity(newIntent);而不是 setResult(resultCode,intent);...感谢这篇文章..
【解决方案2】:

我在这里被困了一段时间。在此处添加我的问题,以确保您也不会挠头。

此函数的第二个参数必须为 0 或更高。

startActivityForResult(intent, 0); // <- this is OK

我将第二个参数设置为 RESULT_OK,即 -1,而我的 onActivityResult 回调从未被调用。所以如果你和我一样卡住了,也可以检查一下你的第二个参数是否正确。

startActivityForResult(intent, RESULT_OK); // <- this is wrong

以上行将无法调用onActivityResult。

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题 - 但由于与 matangs 不同的原因。显然,startActivityForResult 仅在您将 android:launchMode 设置为 standard 用于主要活动(在清单中)时才有效。希望它可以帮助某人。

    【讨论】:

    • 从活动中删除启动模式也解决了我的问题...谢谢
    【解决方案4】:

    您的代码似乎没问题,但您停止第二个活动了吗?

    试试这个:

    setResult(0);
    finish();
    

    【讨论】:

    • 感谢您的回复,我正在努力使其保持第二个活动并且第一个活动将完成。有可能吗?
    • 抱歉我的英语不好。我正在尝试这样做:当 setResult(MY_RESULT) 到 FirstActivity 时,我可以在 onActivityResult 上处理它。然后完成FirstActivity。比如FirstActivity.this.finish();怎么办?
    • 如果你想让FirstActivity在得到SecondActivity的结果后结束,当然你也可以在FirstActivity上执行finish()。
    • setResult(0) 导致失败的结果。我认为结果必须是积极的。
    【解决方案5】:

    如果您正在对 onPause 执行操作(例如取消绑定服务),请尝试评论它并查看是否调用了 onActivityResult(我在此浪费了几个好小时......)

    【讨论】:

      【解决方案6】:

      感谢@johndodo(指向清单)-我找到了解决同一问题的方法。

      在清单中删除android:noHistory=true”为我解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-16
        • 2021-10-05
        • 2012-06-02
        • 2012-10-28
        • 2016-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多