我面临与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
这里有什么问题?
答案 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;为我解决了这个问题。