美文网首页Android面试知识android
Activity中包含Fragment时startActivit

Activity中包含Fragment时startActivit

作者: 04939480fe17 | 来源:发表于2016-04-23 14:40 被阅读5671次

问题:当一个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

相关文章

网友评论

  • 小默森:在Activity中启动,在fragment中接收,怎么玩?
    04939480fe17:在Activity的onActivityResult方法中直接传给Fragment就行了,因为Activity持有Fragment的引用

本文标题:Activity中包含Fragment时startActivit

本文链接:https://www.haomeiwen.com/subject/cddtrttx.html