Fragment与Activity通信.md
Fragment与Activity的通信交互如上图所示:
- 如果Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
- 如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作
- 在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。
备注:
- 如果在Fragment中需要Context,可以通过getActivity(),如果该Context需要在Activity被销毁后还存在,则使用getActivity.getApplicationContext();
考虑Fragment的重复使用问题,降低与Activity的耦合,Fragment操作应该由它的管理者Activity决定。
传递数据给Fragment
步骤流程:
- 在Activity中创建Bundle数据包,调用Fragment实例的setArguments(),将Bundle数据包传给Fragment
- Fragment调用getArguments()获得Bundle对象,然后进行解析就可以
简单示例:
1 | //创建Fragment对象,并通过Bundle对象传递值(在onCreate方法中) |
1 | //(在Fragment类中的onCreateView方法中) |
传递数据给Activity
步骤流程:
- 在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口
- Fragment通过回调接口传数据
简单示例:
首先在Fragment中定义一个接口(定义抽象方法,传什么类型参数)
1 | /*接口*/ |
Fragment类中定义该接口
1 | private Mylistener listener; |
在onAttach方法中,将定义的该接口强转为activity类型
1 |
|
Activity只需实现该接口并重写该方法即可
1 |
|
除了接口回调,还可以使用EventBus进行交互通信。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LT的编程笔记!