startActivityForResult不回调的问题

最近写了一个非常简单的功能,就是传说中我的标题展现的问题,在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版权协议,转载请附上原文出处链接和本声明。