Fragment和Activity之间的数据传递

在电子信息飞速发展的当代,手机的屏幕也越来越大,开发安卓应用时,多窗口也越来越被人们所需要。安卓组件中,Activity代表视窗,里面可以承载许多视图,但通常视图之间相互影响,互相关联,在多任务处理需求时,往往不能满足人们的要求,于是一些视窗分割化的组件开始出现。早期是TabActivity,后来被Fragment所取代,Fragment是Android3.0以后的新组件,附加于Activity,同时也有自己的生命周期,能独立地在自己的布局内处理很多事件而不受外界干扰,于是越来越受到安卓应用开发者的青睐。

虽然Fragment因其独立性受到喜爱,但同时,在同一个Activity上,Fragment和其他组件,尤其是和同一Activity上的其他Fragment之间的数据传递也受到很多限制。因此,在Fragment和Activity的数据传递方面,需要特定的方式才能实现。

常用的方法有:1.设置Activity的成员变量,让Fragment也能访问到,实现数据交互;2.通过setArgument和getArgument来实现数据的传递;3.Fragment的内部回调接口。而我今天要说的就是这第三种方法,也是最为常用和高效的传递方式。下面通过一个Demo来说明讲解如果通过回调接口实现参数传递。

下图是一个分为两部分的Activity,上面一半是一个Fragment,中包含一个列表,列表中是刘备的五虎将,下面一半也是一个Fragment,中包含一个TextView,现在要实现的功能是,点击上面列表中的某一项,将列表项的文字传递到下面Fragment中的TextView中去。

Fragment和Activity之间的数据传递_第1张图片

上面的Fragment我称之为FirstFragment,其中包含一个ListView,内容如图所示。在这个Fragment里面最关键的地方是OnclickListener这个内部接口,这也是该方法实现中最难于理解的部分,如果能充分理解这个内部接口,那么也就能充分理解这种数据传递方式的根本了。这个接口是由Activity来继承的,为什么要Activity来继承这个接口,显得很麻烦的样子,因为当Activity实现这个内部接口之后,必然要实现接口里面未实现的方法,而这个方法又是Fragment可以自由调用的。这样就容易理解了,方法写在Fragment中,却在Activity中实现,故Activity可以自由的传入参数,但由Fragment调用,所以就很好地实现了Fragment和Activity之间的参数传递。

Fragment和Activity之间的数据传递_第2张图片

创建Fragment的时候加载布局,初始化组件,并为ListView设置监听。

Fragment和Activity之间的数据传递_第3张图片

上图中的onPressEnter()方法正是内部接口中的抽象方法,按说抽象方法怎能被调用呢?勿急,慢慢看。

下图是Fragment附加到Activity上和从Activity上脱离时会由系统执行的两个回调方法。该方法表示在Fragment附加到Activity上时,将Activity向上转型成为Fragment的内部接口类型OnclickListener;

Fragment和Activity之间的数据传递_第4张图片

下图是ListView监听时调用的方法,这个方法在此处实现,但仔细观察可以知道,并不是真的实现了这个方法,只不过是调用了接口的方法布局,此处写法有误导的嫌疑,实际上这个方法完全可以不叫onPressEnter(),望勿见怪,功能只是调用接口的onPressEnter方法而已。

Fragment和Activity之间的数据传递_第5张图片

好了,FirstFragment中的代码展示完毕,下面展示SecondFragment中的代码,

Fragment和Activity之间的数据传递_第6张图片

SecondFragment中的方法很简单,只是写了一个setText()的方法而已,该方法用于设置Fragment上那个TextView显示的内容,但这个方法并不在SecondFragment本身中调用,而是在Activity中调用,Activity的代码如图

Fragment和Activity之间的数据传递_第7张图片


onPressEnter()方法由Activity实现,并在此方法中调用SecondFragment的setText()方法,当点击FirstFragment上的列表时,FirstFragment将列表中的文字通过onPressEnter(String stirng)方法传递给Activity,然后在方法中调用SecondFragment的setText()方法,将FirstFragment中传递过来的数据显示到SecondFragment上来。如此,就实现了Activity和Fragment,甚至是Fragment和Fragment之间的参数传递。


附上Demo的链接:http://download.csdn.net/detail/yuqiaoo/8813737


你可能感兴趣的:(Android开发)