Android ListView ViewHolder
利用adapter中的getView的 contentView 的复用机制进行优化。
listview的原理
listView,初始化的时候就会使用inflater来渲染这些view(这些是耗费资源的操作), 如果没有优化,每次都会执行这个inflater来渲染。
优化的原理
创建一个静态类ViewHolder,如果contentView不为空,我们可以通过设置contentView的Tag来保存ViewHolder,不用再 每次去inflater。
demo
static class ViewHolder {
public TextView deviceName;
}
private class TAdapter extends BaseAdapter{
@Override
public int getCount() {
return beanList.size();
}
@Override
public Object getItem(int position) {
return beanList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
convertView = getActivity().getLayoutInflater().inflater(R.layou.layout_list,parent,false);
viewHolder = new ViewHolder();
viewHolder.deviceName = (TextView)convertView.findViewById(R.id.device_name);
convertView.setTag(viewHolder);//在这里保存在converView中
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.deviceName.setText(beanList.get(position).getText();
return convertView;
}
}