通过ArrayAdapter实现Adapter虽然简单、易用,但ArrayAdapter的功能比较有限,它的每个列表项只能给一个TextView动态填充内容。如果开发者需要实现更复杂的列表项,则可以考虑使用 SimpleAdapter。
一、使用SimpleAdapter
这里需要注意的是,不要被SimpleAdapter的名字迷惑欺骗了,SimpleAdapter的功能不仅不简单,还十分强大,列表组件的大部分使用都是通过SimpleAdapter来提供列表项的。
在使用SimpleAdapter之前,先来一起学习SimpleAdapter的构造方法,其构造方法如下:
SimpleAdapter(Contextcontext,List<?extendsMap<String,?>>data,intresource,String[]from,int[]to)
从SimpleAdapter的构造方法可以看到,一共需要5个参数,这也是很多开发者觉得使用SimpleAdapter比较难的原因,其实就是没有很好的理解这5个参数。这个5个参数的含义如下:
· context:要使用的上下文环境。
· data:是一个List<? extends Map<String, ?>>类型的集合对象,该集合中每个Map<String, ?>对象生成一个列表项。
· resource:界面布局文件的ID,对应的布局文件作为列表项的组件。
· from:是一个String[]类型的参数,该参数决定提取Map<String, ?>对象中哪些key对应的value来生成列表项。
· to:该参数是一个int[]类型的参数,该参数决定填充哪些组件。
二、示例
接下来通过一个示例程序来学习如何使用SimpleAdapter创建ListView。
继续使用WidgetSample工程的listviewsample模块,在app/main/res/layout/目录下创建simpleadapter_layout.xml文件,在其中填充如下代码片段:
[代码]xml代码:
01 02 03 04 05 06 07 08 09 10 11 |
|
在res/layout/目录下新建一个simpleadapter_item.xml的列表项布局文件,其代码如下:
[代码]xml代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
接下来为ListView提供Adapter,使用SimpleAdapter决定ListView所要显示的列表项。创建SimpleAdapterActivity.java文件,加载上面新建的布局文件,具体代码如下:
[代码]java代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
|
上面的程序创建了一个SimpleAdapter。getData()方法生成一个长度为6的集合,意味着生成的ListView将会包含6个列表项,每个列表项都是R.layout.list_item对应的组件。
第一个列表项的数据是{“img”=R.id.item_01, “title”=“小宗”, “info”=“电台DJ”}Map集合。创建SimpleAdapter时第5个参数、第4个参数指定使用ID为R.id.icon_img组件显示img对应的值,使用ID为R.id.title_tv组件显示title对应的值,使用ID为R.id.info_tv组件显示info对应的值,这样第一个列表项组件所包含的三个组件都有了显示的内容。后面的列表项以此类推。
SimpleAdapter 同样可作为 ListActivity 的内容Adapter,这样可以让用户方便地定制ListActivity所显示的列表项。
同ArrayAdapter创建ListView一样,如果需要监听用户单击、选中某个列表项的事件,则可以通过AdapterView的setOnltemClickListener()方法为单击事件添加监听器,或者通过 setOnItemSelectedListener()方法为列表项的选中事件添加监听器。
今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!