Fragment与Activity之间的数据交互

一、Activity把值传递给Fragment   

  • 建议的传值方式是通过Bundle来传递,而不是直接作为fragment的构造参数传递。在activity中创建bundle数据包,并调用fragment的setArguments(Bundle bundle)方法,即可将Bundle数据包传给fragment。在Fragment中用getArguments方法得到传递过来的值。
  • 在宿主Activity中定义方法,将要传递的值传递到Fragment中,在Fragment中的onAttach方法中,获取到这个值。
  • 扩展一下创建Fragment和传递数值

 

二、Fragment把值传递给Activity   

在fragment中定义一个内部回调接口,再让包含该fragment的activity实现该回调接口,这样fragment即可调用该回调方法将数据传给activity。接口回调是java不同对象之间数据交互的通用方法。   

activity实现完了接口怎么传给刚才的fragment呢?当fragment添加到activity中时,会调用fragment的方法onAttach(),这个方法中适合检查activity是否实现了OnArticleSelectedListener接口,检查方法就是对传入的activity的实例进行类型转换,然后赋值给我们在fragment中定义的接口。   

在一个fragment从activity中剥离的时候,就会调用onDetach方法,这个时候要把传递进来的activity对象释放掉,不然会影响activity的销毁,产生不必要的错误。注意看onAttach方法中的代码,在赋值之前要做一个判断,看看Activity中有没有实现了这个接口,用到了instanceof。如果没有实现接口,我们就抛出异常。

 三、Fragment与Fragment之间的传值

 1、通过共同的Activity传递   

这种方法是在Activity里面添加一个字段、来临时保存要一些值。在Activity中定义一个字段、然后添加set和get方法、代码如下、mTitle就是要传递的参数、如果是传递对象、可以把mTitle换成一个对象即可.

2、通过Bundle来传递   

可以使用bundle进行参数传递、这样在两个Fragment跳转的时候就可以带上参数了、同样也可以传递一个复杂的对象

猜你喜欢

转载自blog.csdn.net/hd12370/article/details/82825077