Activity中包含Fragment时startActivityForResult()

问题:当一个Activity中包含一个Fragment时我们使用startActivityForResult()方法启动一个Activity,待这个被启动的Activity设置了一个返回值然后被销毁,如何在Activity和Fragment中获得这个返回值呢?

分析:启动Activity时,我们一般会设置一个requestCode以便在开启了多个具有返回值的Activity时进行识别以做出不同的响应对策。但使用不同的启动方式,在ActivityFragment中拦截到的结果不同,主要有以下几种情况:

  1. Activity中启动并获得结果: 可以在ActivityonActivityResult()方法中根据requestCode就可以获得返回值,无论是否调用super.onActivityResult()方法,其中的Fragment不会获得任何值
  2. Fragment中启动并在Activity中获得结果:在Fragment中使用getActivity().startActivityForResult()方法启动,可以在ActivityonActivityResult()方法中根据requestCode就可以获得返回值,无论是否在ActivityonActivityResult()调用super.onActivityResult()方法,其中的Fragment不会获得任何值
  3. Fragment中启动并在Fragment中获得结果:在Fragment中使用startActivityForResult()方法启动,可以在FragmentonActivityResult()方法中根据requestCode就可以获得返回值,必须调用super.onActivityResult()方法

注意:对于3来说,如果在ActivityonActivityResult()方法中没有调用super.onActivityResult()方法,那么在Fragment中不能获取任何数据,在Activity中可以获得数据但是无法根据requestCode去识别,传入的是一个6位的requestCode


总结

  1. Fragment中启动,Activity中接收结果:使用getActivity().startActivityForResult()
  2. Fragment中启动,Fragment中接收结果:使用startActivityForResult(),且在ActivityonActivityResult()中调用super.onActivityResult()

参考


相关资料


Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容