ListView优化--ViewHolder的使用

时间:2022-10-06 22:43:59

使用viewHolder的好处就不多说了…
怎么使用及使用时应注意的一些东西写给自己看~~

1、一般都是在adapter中定义一个内部类,方便快捷你懂的
属性就是listview每个item中的控件,另外为了方便还定义了一个方法用来给每个控件设置数据。

class ViewHolder {
public TextView tv_bgdh;
public TextView tv_tdh;
public TextView tv_qyjc;

public void setAllText(BgdInfo data) {
this.tv_bgdh.setText(data.getBgdh());
this.tv_tdh.setText(data.getTdh());
this.tv_qyjc.setText(data.getQyjc());
}
}

2、接下来就是在adapter中的getView方法中使用了

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.tgcx_list_item, null);
viewHolder = new ViewHolder();
viewHolder.tv_bgdh = (TextView) convertView.findViewById(R.id.tv_bgdh);
viewHolder.tv_tdh = (TextView) convertView.findViewById(R.id.tv_tdh);
viewHolder.tv_qyjc = (TextView) convertView.findViewById(R.id.tv_qyjc);

convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
resetViewHolder(viewHolder);
}

viewHolder.setAllText(datas.get(position));
return convertView;
}

3、注意上一步中resetViewHolder(viewHolder)方法,这个方法的目的是重置viewHolder控件中的数据,因为复用的关系,item中的数据有可能造成混乱,再写个这个方法试试

public void resetViewHolder(ViewHolder viewHolder) {
viewHolder.tv_bgdh.setText(null);
viewHolder.tv_tdh.setText(null);
viewHolder.tv_qyjc.setText(null);
}

4、OK