使用ViewHolder优化list性能

众所周知,在list中的一个item是通过调用适配器adapter中的getview方法来得到要显示view对象。如果我们每次都在getview方法中实例化一个对象的话,既浪费时间又浪费资源。所以我们要充分运用listview为我们缓存下来的view,而getview()函数的第二个参数convertview即是list中item的缓存的view对象。而在初始化时缓存中没有view对象则convertViewnull。

以下代码用类ViewHolder很好地运用了缓存,提升了性能。

public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
//		return super.getView(position, convertView, parent);
		final ViewHolder holder;
		if(convertView==null){
		convertView=LayoutInflater.from(context).inflate(resource, null);
		holder=new ViewHolder();
		holder.button=(Button)convertView.findViewById(R.id.group);
		holder.title=(TextView)convertView.findViewById(R.id.title);
		holder.image=(ImageView)convertView.findViewById(R.id.photo);
		holder.username=(TextView)convertView.findViewById(R.id.username);
		convertView.setTag(holder);
		}
		else{
			holder=(ViewHolder)convertView.getTag();
		}
		holder.title.setText(data.get(position).get(from[0]).toString());
		holder.image.setImageBitmap((Bitmap)data.get(position).get(from[2]));
		holder.username.setText(data.get(position).get(from[3]).toString());
		holder.button.setText(data.get(position).get(from[1]).toString());
		

		return convertView;
}

类ViewHolder定义:

	static class ViewHolder {
		ImageView image;
		Button button;
		TextView title;
		TextView username;
	}
 

猜你喜欢

转载自sunsz.iteye.com/blog/1612986