关于android Adapter的技巧和设计模式

原创
2013/01/21 21:44
阅读数 2.4K

    首先声明这是自己想练练手,知识很浅显,网上也很多,大家也都晓得了,但我觉得有时候打一遍心里记得牢些,仅此而已

    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;
}

    嗯,婚礼进行曲...

展开阅读全文
加载中

作者的其它热门文章

打赏
1
12 收藏
分享
打赏
3 评论
12 收藏
1
分享
返回顶部
顶部