在开发中,我们经常使用到ListView这个控件。Android的AdivI也提供了许多创建ListView适配器的快捷方式。例如ArrayAdadivter、SimdivleAdadivter和SimdivleCursorAdadivter等。但你是否发现,如果采用这些系统自带的适配器,对于事件的响应只能局限在一个行单位。假设一行里面有一个按钮和一个图片控件,它们之间的响应操作是不一样的。若采用系统自带的适配器,就不能精确到每个控件的响应事件。这时,我们一般采取自定义适配器来实现这个比较精确地请求。
ListView的创建,一般要具备两大元素:
1)数据集,即要映射的字符串、图片信息之类。
2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件),再添加到ListView中。
一、实现细节:
下面是一个实操例子:
1、创建数据集,一般定义如下
private ArrayList<Contacts> contacts = new ArrayList<Contacts>();
2、创建适配器
public class MyListAdapter extends BaseAdapter {
private ArrayList<Contacts> contacts = null;
private Context mContext = null;
public MyListAdapter(ArrayList<Contacts> contacts,Context mContext) {
super();
this.contacts = contacts;
this.mContext = mContext;
}
......
}
3、将适配器绑定到ListView控件
myAdapter = new MyListAdapter(contacts,this);
setListAdapter(myAdapter);
4、将R.layout.item布局作为一个视图,添加到listView中:
ListItemView listItemView = new ListItemView();
if (convertView == null || position < contacts.size()) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);
listItemView.iamge = (ImageView) convertView.findViewById(R.id.color_image);
listItemView.title = (TextView) convertView.findViewById(R.id.color_title);
listItemView.text = (TextView) convertView.findViewById(R.id.color_text);
convertView.setTag(listItemView);
}else{
listItemView = (ListItemView) convertView.getTag();
}
二、实例源码:
AndroidManifest.xml
<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />