Android面试知识android

Activity中包含Fragment时startActivit

2016-04-23  本文已影响5671人  04939480fe17

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

上一篇 下一篇

猜你喜欢

热点阅读