解决在v4包下的Fragment 里startActivityForResult,onActivityResult返回空数据问题

Posted wjinhhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决在v4包下的Fragment 里startActivityForResult,onActivityResult返回空数据问题相关的知识,希望对你有一定的参考价值。

场景:

MainActivity里有几个Fragment,其中MainActivity继承AppCompatActivity即继承了FragmentActivity,现在在某个Fragment里启动了FirstActivity,并需要在FirstActivity结束后返回数据给该Fragment。

做法:

在Fragment里使用startActivityForResult,然后在FirstActivity调用finish时通过setResult设置返回结果,一段操作后,发现在onActivityResult里获取不到返回值,然后。。。

解决方案:

Intent intent= new Intent(context, XXActivity.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
this.startActivityForResult(intent, REQUEST_CODE);//切记不要getActivity()

注意:这里一定不要设置Flags,因为使用的是Fragment.this.startActivityForResult,不是getActivity().startActivityForResult,无需设置,关于launchMode,自己百度。如果设置了,这里会因为启动新的任务栈触发onActivityResult()方法执行,导致得到的数据肯定为空。

另外,如果是在MainActivity里获取数据,则使用getActivity().startActivityForResult,同样要设置Flags,切记onActivityResult里的super.onActivityResult(requestCode, resultCode, data);千万不要手贱删掉,不然是拿不到数据。

自己在这里遇到过坑,希望对遇到该问题得朋友有所帮助。

以上是关于解决在v4包下的Fragment 里startActivityForResult,onActivityResult返回空数据问题的主要内容,如果未能解决你的问题,请参考以下文章

ViewPager和Fragment组合 v4包下的页面切换

Fragment用app包还是v4包解析

fragment里层级套的太深没办法执行onactivityresult怎么办

关于v4包的Fragment过渡动画的事件监听无响应问题解决

在一个ViewPager中同时使用v4 Fragment和native Fragment

如何从 Support V4 Fragment 获取父活动?