onActivityResult不起作用?

时间:2009-12-31 06:35:40

标签: android

我面临与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

这里有什么问题?

6 个答案:

答案 0 :(得分:30)

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

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

您发布的Activity在完成Activity之前不会向您发送结果,即finish()已被调用。

因此,在您的情况下,您需要在SecondActivity

中调用此方法
setResult(...);
finish();
FirstActivity之前

将在其onActivityResult方法中收到结果。当然,这意味着SecondActivity现在已经消失,FirstActivity再次成为最高层。


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

答案 1 :(得分:18)

我被困在这里一段时间了。在这里添加我的问题,以确保你不会刮伤你的头。

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

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

我将第二个参数设置为RESULT_OK,即-1,并且我的onActivityResult回调永远不会被调用。所以,如果你像我一样陷入困境,你也可以检查你的第二个参数是否正确。

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

上述行无法调用onActivityResult。

答案 2 :(得分:7)

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

答案 3 :(得分:5)

您的代码似乎没问题,但是您是否停止了第二次活动?

尝试一下:

setResult(0);
finish();

答案 4 :(得分:1)

如果你正在对onPause采取行动(比如取消绑定服务),请尝试对其进行评论,看看是否已调用onActivityResult(我浪费了很多时间......)

答案 5 :(得分:0)

感谢@johndodo(指向最明显的) - 我找到了同样问题的解决方案。

删除最明显的android:noHistory=true&#34;为我解决了这个问题。