以下是自己学习中的一点记录:
在android开发中ListView比较常用。
但是开发过程中会遇到这样的情况:
当ListView中的加载项过多时设备出现卡顿。
当下拉ListView列表时加载过慢。
为了保证在有大量列表项目需要加载时保证ListView不会缓慢和卡顿,在开发中可以用到ViewHoler。
大概思路就是:
1.添加ViewHoler类
2.实例化viewHolder
3.在首次创建View时将其取出并用convertView的setTag方法保存起来。
4.以后再次使用就用setTag取出,避免重复加载。
附上一个自己用到的实例:
public View getView(int position, View convertView, ViewGroup parent) {
// LayoutInflater inflater = LayoutInflater.from(context);
// layout = (LinearLayout) inflater.inflate(R.layout.call,null);
// TextView nametv = (TextView) layout.findViewById(R.id.phoneName);
// TextView numbertv = (TextView) layout.findViewById(R.id.phoneNumber);
// nametv.setText(lists.get(position).getName());
// numbertv.setText(lists.get(position).getNumber());
ViewHolder holder;
if (convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.call,null);
holder = new ViewHolder();
holder.nametv = (TextView) convertView.findViewById(R.id.phoneName);
holder.numbertv = (TextView) convertView.findViewById(R.id.phoneNumber);
holder.nametv.setText(lists.get(position).getName());
holder.numbertv.setText(lists.get(position).getNumber());
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
holder.nametv.setText(lists.get(position).getName());
holder.numbertv.setText(lists.get(position).getNumber());
}
return convertView;
}
public static class ViewHolder {
TextView nametv;
TextView numbertv;
}
注意:
被注释掉的代码是没有优化的情况。