在ListView中绑定并显示数据

首先,ListView有两个主要的职责:

  1. 将数据填充到布局
  2. 处理用户的点击选择事件
其次,一个ListView至少要有三个元素:

  1. ListView中每一条目就是一个视图对象(View)
  2. 填充在每一个条目中的数据或者图片等
  3. 连接数据与ListView的适配器

Android AdapterView常用适配器 Adapter 含义
ArrayAdapter<T> 用来绑定一个数组,支撑泛型操纵
SimpleAdapter 将静态的map类型数据和xml定义的布局控件对应起来
SimpleCursorAdapter 绑定从数据库获得的游标数据
BaseAdapter 通用的基础适配器,可以在ListView和Sipnner中使用

ArrayAdapter

实现简单的ListView数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。

  • 首先在布局文件中添加一个ListView控件
  • 在Activity的代码中声明和初始化该控件
  • 定义一组数据来存放要在ListView中显示的内容
  • 新建一个ArrayAdapter适配器,一般使用以下构造函数。三个参数分别是:上下文对象,包含textView的布局文件,字符串数组。要注意的是,第二个参数所代表的该布局文件必须包含有一个TextView。
public ArrayAdapter (Context context, int textViewResourceId, T[] objects)

  • 通过setAdapter方法为ListView绑定该监听器
此外,可以通过Android系统内置的布局文件,实现带选择框的ListView:

  • 在新建ArrayAdapter时引入系统的局部文件对象,比如android.R.layout.simple_list_item_checked
  • 通过setChoiceMode方法设定选择的模式,如多选(ListView.CHOICE_MODE_MULTIPLE)
android.R.layout.simple_list_item_checked实现的效果如下图所示:
另外,还有 android.R.layout.simple_list_item_multiple_choice实现带CheckBox的ListView
android.R.layout.simple_list_item_single_choice实现带RadioButton的ListView



通过以上方法,我们定义并且实现了带数据的ListView。但这还是第一步,除了对ListView的实现之外,我们还应该对用户的点选事件进行监听,通过ListView.setOnItemClickListener方法,具体的参考API文档。

ListView.setOnItemClickListener(new OnItemClickListener() {

@Override
 publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) { }
});

SimpleAdapter

SimpleAdapter的功能更为强大,可以实现ListView中Item的内容有文字、图片、多选框等

  • 在XML文件中定义ListView每一行条目(Item)所要实现的布局
  • 在Activity代码中新建ArrayList,里面存放的是HashMap对象,将数据以键值对的形式存放在里面
  • 新建SimpleAdapter对象,绑定监听器,步骤和上面的类似

SimpleCursorAdapter

An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file.

从数据库获取数据,通过返回的Cursor对象绑定到ListView中

主要不同是构造SimpleCursorAdapter的构造函数

public SimpleCursorAdapter(Context context, int layout,Cursor c, String[] from, int[] to)

弄懂了这个就可以了。


BaseAdapter

实现自定义的Adapter适配器。主要是要新建一个类,继承实现抽象类BaseAdapter。

其中,getView方法较难理解,系统在绘制列表的每一行时都将调用该方法。该方法有三个参数,Position表示显示的是第几行,covertView是指从布局文件中inflate来的布局。

我们将定义好的ListView布局文件提取成View实例用来显示,然后将xml文件中的各个组件实例化(findViewById方法)。这样便将数据对应到各个组件上了,如果为了响应点击事件,则需要添加监听器。

过程如下:

  • 获得要绘制的列表的长度
  • 调用getView方法,在这个方法中首先获得一个View(实际上是一个ViewGroup),然后再实例化和设置各个组件。
  • 一行一行往下绘制,直到绘制完为止

public View getView (int position,View convertView, ViewGroup parent)

convertView找了资料说,相当于一个缓存,当条目不可见时,它就缓存了它的数据。以后,当条目再次出现时,只须更新数据就可以了,节约了系统的消耗。


无关的补充:

select 和 click 的区别:

select是一种状态,而click是一个动作。

用户一般都是先选择(select),在点击(click)。

当用户把光标移动的菜单选项上面时,就是选择。



你可能感兴趣的:(ListView)