首先声明这是自己想练练手,知识很浅显,网上也很多,大家也都晓得了,但我觉得有时候打一遍心里记得牢些,仅此而已
Adapter呢,大家都认得,就是框架和数据的红娘,多少框架和数据的婚礼都是它主持的啊~
具体表现在三个方面:
1 当每条数据进入可见区域时,Adapter的getView()会被调用,返回代表具体数据的视图
2 触摸滚动时,频繁调用(当然这里以listView为例)
3 支持成百上千条数据
看一个例子,这是最简单得方法,当然也是最慢和最不实用的
public View getView(int pos, View convertView, ViewGroup parent){
View item = mInflater.inflate(R.layout.list_item, null);
((TextView) item.findViewById(R.id.text)).setText(DATA[pos]);
((ImageView) item.findViewButId(R.id.icon)).setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return item;
}
这样就是结婚了,也是属于慢热型,看得Adapter着急啊,于是乎找了一个辅助的媒婆来,就是里面这个converView,这个converView用过之后貌似回回收,据说提高效率200%啊~
public View getView(int pos, View convertView, ViewGroup parent){
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
}
((TextView) convertView.findViewById(R.id.text)).setText(DATA[pos]);
((ImageView) convertView.findViewButId(R.id.icon)).setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
看着一对新人如此迅速地坠入爱河,Adapter摆摆手说罢了罢了,好事做到底,送你们一些彩礼吧,就当为你们结婚助兴,于是乎ViewHolder跑了出来,据说又提高50%哦~
static class ViewHolder {
TextView text;
ImageView icon;
}
public View getView(int pos, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text));
holder.icon = (ImageView) convertView.findViewButId(R.id.icon));
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(DATA[pos]);
holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);
return convertView;
}
嗯,婚礼进行曲...