onActivityResult不起作用?

And*_*ner 18 android

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

从FirstActivity启动SecondActivity:

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

并处理结果:

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

要从SecondActivity将消息发送到FirstActivity:

在SecondActivity中:

setResult(0);
Run Code Online (Sandbox Code Playgroud)

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

我的操作系统是:1.5

这有什么不对?

Chr*_*Orr 30

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

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

Activity你推出之前,不会给你的结果Activity已经完成,即finish()已经被调用.

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

setResult(...);
finish();
Run Code Online (Sandbox Code Playgroud)

之前FirstActivity会在其onActivityResult方法中收到结果.当然,这意味着它SecondActivity现在已经消失,并且FirstActivity再次成为最高层.


发送结果FirstActivity然后关闭它同时保持SecondActivity活动状态是不可能的.在这种情况下,您应该只处理这个'结果'所处的内容SecondActivity,或者将其发送给Service您定义以执行您想要的任何处理.


mat*_*ngs 18

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

该函数的第二个参数必须为0或更高.

startActivityForResult(intent, 0); // <- this is OK
Run Code Online (Sandbox Code Playgroud)

我将第二个参数设置为RESULT_OK,即-1,我的onActivityResult回调永远不会被调用.因此,如果你像我一样卡住,你也可以检查你的第二个参数是否正确.

startActivityForResult(intent, RESULT_OK); // <- this is wrong
Run Code Online (Sandbox Code Playgroud)

上面的行将无法调用onActivityResult.


joh*_*odo 7

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


tbr*_*lle 5

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

试试吧:

setResult(0);
finish();
Run Code Online (Sandbox Code Playgroud)