数据适配器BaseAdapter

来源:互联网 发布:ios wkwebview 传值js 编辑:程序博客网 时间:2024/04/30 13:44
什么是数据适配器:通过数据适配器,我们可以将数据源和UI控件联系起来。
数据适配器adapter的作用就是将多种多样的数据源适配成listView可以读取的模式
1.降低程序的耦合性
2.容易扩展

最常用的数据适配器:BaseAdapter

ListView的显示和缓存机制
总结来讲:
需要才显示,显示完就被回收到缓冲池中。
1. 屏幕上滑时,先将item1回收到View缓冲池中
2. 新要显示的item8从View缓冲池中取出,并重新设置好item8所要显示的数据
3. item8显示出来


public View getView(int position, View convertView, ViewGroup parent) {
View view = mInflater.inflate(R.layout.item, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
TextView title = (TextView) view.findViewById(R.id.tv_title);
TextView content = (TextView) view.findViewById(R.id.tv_content);
ItemBean itemBean = itemList.get(position); //得到当前的这个ItemBean对象
//然后用这个itemBean填充item转化过来的view
imageView.setImageResource(itemBean.imageResId);
title.setText(itemBean.title);
content.setText(itemBean.content);
return view;
}

没有利用baseadapter的缓存机制

通过判断BaseAdapter中的getView()方法的参数convertView,我们可以利用ListView给我们提供的缓冲机制。但是还是有瓶颈,就是findViewById()方法。


使用ViewHolder类来优化BaseAdapter中的getView()方法:
1. 在BaseAdapter的继承类中先创建一个ViewHolder类,里面的成员变量对应我们ListView中一个View的所有控件;
2. 判断getView()方法的一个参数convertView是否为空;
3. 通过VIew的setTag()方法将ViewHolder和convertView绑定;
4. 通过View的getTag()方法从convertView中取出与之关联的ViewHolder对象
5. 通过ViewHolder对象找到对应控件

ViewHolder的作用是将ListView中每个View中的每个控件都关联上了getView()中提供的convertView,从而也为这些控件提供了ListView的缓冲机制,进而避免了用大量的findViewById()创建这些小的控件,因为既然ListView中的每个View可以通过缓冲重复利用,那么这些View中的控件也就可以了,ViewHolder就是起到了这个承接着的作用。



0 0