在activity A中startActivityForResult
在activity B中代码如下
@Override
protected void onPause() {
super.onPause();
Intent intent=new Intent();
intent.putExtra("currentSelectPhotoPath",dstList.get(currentSelectItem));
setResult(GroupPhotoListActivity.REQUSET_FROM_VIEWIMAGE, intent);
finish();
}
在activity A中,onActivityResult(int requestCode, int resultCode, Intent intent) 的intent总为null.
解决办法:
因为执行back键的时候,activity A很有可能已经start了,然后activity B 的onPause()还没执行,所以setResult并没有传入
所以将setResult在finish()中传入可以解决这个问题。
@Override
public void finish() {
// TODO Auto-generated method stub
Intent intent=new Intent();
intent.putExtra("currentSelectPhotoPath",dstList.get(currentSelectItem));
setResult(GroupPhotoListActivity.REQUSET_FROM_VIEWIMAGE, intent);
super.finish();
}
可以看一下onActivityResult的调用时机,
拿B返结果给A作示例:
B—onPause
A—onActivityResult
A—onRestart
A—onStart
A—onResume
B—onStop
B—onDestroy
从上面过程可以看出,首先是B处于Pause 状态,然后等待A执行 onRestart——> onStart ——〉onResume,然后才是B 的onSstop——>onSdestroy,而A的 onActivityResult() 需要在B的onPause之后,A的onRestart之前这中间调用,所以B中的setResult()函数应该放在B的onStop之前调用。
参考地址:https://my.oschina.net/adacoder/blog/367749
http://blog.youkuaiyun.com/haha223545/article/details/52479788