在代码之中大量的使用findViewById是一件十分消耗性能的事。因此建议多使用ViewHolder。
我们先来看一下ViewHolder的简单实现:
static class ViewHolder {
TextView text;
TextView timestamp;
ImageView icon;
ProgressBar progress;
int position;
}
在这个ViewHolder类之中有TextView类型成员变量,ImageView类型成员变量,ProgressBar以及一个整形数据;
然后我们可以通过下面方式使用它:
ViewHolder holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image);
holder.text = (TextView) convertView.findViewById(R.id.listitem_text);
holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp);
holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner);
convertView.setTag(holder);
我们可以看到,将concertView中的TextView,ImageView,ProgressBar赋给ViewHolder的d对象的相应成员属性。
关于Tags,我们看下官方文档:
Unlike IDs, tags are not used to identify views. Tags are essentially an extra piece of information that can be associated with a view.
Tags是用于存放view的附加信息的内容。因此现在很容易理解:
convertView.setTag(holder);
就是说给convertView设置额外的数据,这个数据之中有TextView,ImageView,ProgressBar类型数据。