2018-04-10—Fragment、Activity数据传递

我们之前已经学会了使用Fragment,但是fragment和Activity之间的数据交互是怎样一个流程呢?我来给大家画一张图:

2018-04-10—Fragment、Activity数据传递
fragment、Activity数据传递流程图   

我们习惯上通过Bundle从Activity给fragment传值。而从fragment给Activity传值习惯用接口回调,在Activity中实现一个接口,然后在接口方法里的参数放置数据。

下面我们来一步一步看一下是怎么实现的。


一、Activity给fragment传值:


2018-04-10—Fragment、Activity数据传递

我们创建了一个全局的bundle对象,然后在切换fragment的时候,调用了切换的fragment的setArguments方法,把bundle对象传入fragment。

接下来我们看fragment。

2018-04-10—Fragment、Activity数据传递

我们通过getArguments方法来得到bundle对象,然后通过getString得到我们bundle中的数据,第一个参数是key,第二个参数是默认数据,如果获取失败或者空,则得到后面这个数据。



二、fragment给Activity传值

我们先写一个接口,叫做DataCallBackListener的接口,然后在里面写一个抽象方法。

2018-04-10—Fragment、Activity数据传递

接下来我们在fragment中创建一个这样的接口,

2018-04-10—Fragment、Activity数据传递

之后我们需要给这个接口实例化,


2018-04-10—Fragment、Activity数据传递

这里是不是看的有些懵逼?不用着急,我们来看接下来这一步:


2018-04-10—Fragment、Activity数据传递

没错,我们在MainActivity中实现了DataCallBackListener这个接口,也就意味着这个接口被实例化了,所以我们可以用DataCallBackListener来接收MainActivity。

然后在button的点击事件中调用这个接口


2018-04-10—Fragment、Activity数据传递

我们返回了一个字符串。

刚才用过MainActivity实现了接口,现在要实现他的方法了。

2018-04-10—Fragment、Activity数据传递

我们把从OneFragment中的数据打印到日志中。


2018-04-10—Fragment、Activity数据传递

好了, 现在大家知道了fragment给Activity传值的方法了吧。


三、fragment给fragment传值

    既然前两种大家都会了,那么只要吧前两种结合起来,就可以做到fragment给fragment传值了。

我们通过回调接口从fragment1给Activity传值,然后在Activity回调的方法中,用bundle给fragment2传值,这样就做到了。

偷个小懒,具体代码就不就写了。