-
一、什么是数据适配器
下图展示了数据源,适配器,listview之间的关系
数据源来源各种各样,listview显示数据是有一定的要求,而适配器正是建立了数据源与listview之间的数据关系,进行了结偶,使程序更加容易扩展
-
二、listview的显示与缓存机制
需要才显示,显示完就被回收到缓存
-
三、BaseAdapter的基本结构
public int getCount():适配器中数据集中数据的个数
public Object getItem(int position):获取数据集中与指定索引对应的数据项
public long getItemId(int position):获取指定行对应的ID
public View getView(int position,VIew convertView,ViewGroup parent):获取每一个Item的显示内容
-
四、BaseAdapter的三重境界
1、逗比式
先创建一个listActivity extends Activity
在listActivity的xml中,放置一个listview控件
接着,创建listItem布局文件
再创建一个实体类,用来接收数据
接着在listviewActivity中对listView控件进行初始化,并构建数据源数据
接着构建适配器
最后在listActivity中,进行数据绑定
逗比式特点:没有任何优化处理,每次都创建新的View,设置控件,效率极其低下
2、普通式
普通式特点:利用了ListView的缓存特性,如果没有缓存才创建新的View。 但findVIewById依然会浪费大量时间
3、文艺式
创建一个ViewHolder类
文艺式的特点:不仅利用了ListView的缓存,更通过ViewHolder类来实现显示数据的视图的缓存,避免多次通过findViewById寻找控件
-
五、三种方式的耗时比较
在adapter中设置一个成员变量,用来记录总耗时
public long mSumTime;
分别在三种加载方式中,获取加载时间并打印
long startTime = System.nanoTime(); //获取系统的纳秒时间
long endTime = System.nanoTime();
long delValue = endTime - startTime; //获取程序运行时间的差值
mSumTime += delValue;
Log.d("sys", String.valueOf(mSumTime));
逗比式耗时:312634000
普通式耗时:287840000
文艺式耗时:227478000
综上比较,文艺式耗时最短
-
六、BaseAdapter总结
ViewHolder优化BaseAdapter思路
1、创建Bean对象,用于封装数据
2、在构建方法中初始化用于映射的数据List
3、创建VIewHolder类,创建布局映射关系
4、判断contentView,为空则创建,并设置tag,否则通过tag来取出ViewHolder
5、给ViewHolder中的控件设置数据