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