天天看点

Android系列之Fragment(四)----ListFragment的使用

【正文】

一、listfragement的介绍:

listfragment继承于fragment。因此它具有fragment的特性,能够作为activity中的一部分,目的也是为了使页面设计更加灵活。相比fragment,listfragment的内容是以列表(list)的形式显示的。

1、listfragment布局:

listfragment的默认布局包含一个list view。因此,在listfragment对应的布局文件中,必须指定一个 android:id 为 “@android:id/list” 的listview控件! 若用户想修改listview,可以在oncreateview(layoutinflater, viewgroup, bundle)中进行修改。当然,用户也可以在listfragment的布局中包含其它的控件。

下面是官方文档中listfragment对应的一个layout示例:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

listview中每一行的显示内容,是通过设置适配器listadapter来实现的。我们既可以自定义,也可以采用系统默认的layout。后面的应用实例中,会分别列举2种情况下的显示

2、绑定数据:

listfragment绑定listview的数据(即绑定适配器)时,必须通过listfragment.setlistadapter()接口来绑定数据,而不是使用listview.setadapter() 或其它方法

二、通过arrayadapter来加载listfragment的举例:

【举例】现在将平板电脑分成三部分:点击左侧的按钮,出现中间的新闻标题列表(listfragment),点击中间listfragment的某个item,在最右侧的fragment中显示详情。

新建工程文件m01_listfragment01:

(1)定义activity_main.xml的布局:

activity_main.xml的代码如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

实际上分配了三个线性布局,左侧显示按钮,中间显示标题,右侧显示详情。这个布局文件对应的可视化界面如下:

Android系列之Fragment(四)----ListFragment的使用

(2)定义中间的listfragment,即新建文件articlelistfragment.java:

articlelistfragment.java的代码如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

核心代码是22至32行:我们让这个fragment继承listfragment,然后在oncreate()方法中定义一个arrayadapter,将数据放进去,最后绑定适配器就行了。需要注意的是,由于我们继承的是listfragment,这个fragment默认自带了一个布局,所以我们不需要重新新建布局文件了。

(3)将中间的listfragment加载到activity当中去。当我们点击按钮时,就开始加载这个fragment:

mainactivity.java的代码如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

这个代码比较简单,就不多解释了。

现在运行程序,初始界面如下:

Android系列之Fragment(四)----ListFragment的使用

点击左侧的按钮后,显示如下:

Android系列之Fragment(四)----ListFragment的使用

注:如果想实现:点击中间的某个item,弹出吐司显示那个item中的内容,可以在上方的articlelistfragment.java中的监听事件里添加如下代码:

(代码放置的位置是:让它和fragment的生命周期方法并列就行了)

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

由此我们可以看到,监听事件的函数为onlistitemclick(),可以直接写,不需要set。

这里面关键代码在第05行,通过getitem()接收那个item,然后用字符串来接收。

我们先去掉这部分的监听事件代码,继续往下看。

(4)点击中间listfragment的item,加载右边的detailfragment:

我们在中间listfragment中添加一个按钮的监听事件,监听事件的函数为onlistitemclick(),articlelistfragment.java在上面代码的基础之上,添加的代码如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

上面的代码中,我们是在中间的fragment中点击按钮,然后加载右边的fragment,然后要注意14至18行的核心代码,看一下它是如何通过bundle来传递数据的。

需要注意的是,第12行代码必须用replace的方式加载右侧的fragment,而不是add;如果用add,运行的错误稍后将展示出来。

(5)定义右边的detailfragment:

先定义布局文件,在里面加一个textview,fragment_detail.xml的代码如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

然后新建文件,detailfragment.java的代码如下: 

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

核心代码是第25行,仔细看一下我们是怎么通过键值对来拿到中间的fragment传递过来的item的内容。

现在运行程序,一次点击左边的按钮和中间的item,效果如下:

Android系列之Fragment(四)----ListFragment的使用

如果我们在中间的fragment中错误地通过add方式加载右边的fragment,而不是通过replace方式,最终错误的效果如下:

Android系列之Fragment(四)----ListFragment的使用

也就是说,每点击一次中间的item,就会在右边继续加载一个文本,而不是替代的方式,很显然,这种方式不是我们想要的。

继续阅读