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; } }