最近写了一个非常简单的功能,就是传说中我的标题展现的问题,在A_Activity中使用startActivityForResult方法,B_Activity中进行部分操作后,我要通知A_Activity进行更新,但是发现无论如何都回调不到A_Activity中,一度我还怀疑自己对那个地方的理解不够。
我的A_Activity代码(有省略):
startActivityForResult(intent, RESULT_OK);
B_Activity中的代码(同样有省略)就是:
setResult(RESULT_OK, intent);
这样写了发现无论如何我的A中的
protected void onActivityResult(int requestCode, int resultCode, Intent data) {}
都拿不到回调,看了看网上的博客,说是使用startActivityForResult时的请求码不能使用RESULT_OK,否则上面的方法不会执行,我改了,这样我就轻松的拿到数据了。于是,我进了源代码里进行一探究竟:
/**
* Same as {@link #startActivity(Intent, Bundle)} with no options
* specified.
*
* @param intent The intent to start.
*
* @throws android.content.ActivityNotFoundException
*
* @see {@link #startActivity(Intent, Bundle)}
* @see #startActivityForResult
*/
@Override
public void startActivity(Intent intent) {
this.startActivity(intent, null);
}
进入这个方法startActivity(Intent intent, Bundle bundle):@Override
public void startActivity(Intent intent, @Nullable Bundle options) {
if (options != null) {
startActivityForResult(intent, -1, options);
} else {
// Note we want to go through this call for compatibility with
// applications that may have overridden the method.
startActivityForResult(intent, -1);
}
}
于是我就看出为什么了,RESULT_OK在Activity中的值就是-1,所以如果我们给的请求码是-1的时候是就相当于使用startActivity(),这样是不会调用onActivityForResult方法的。最后附上我看到的那个比较全的博客:http://blog.csdn.net/sbvfhp/article/details/26858441
版权声明:本文为zhoudailiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。