Android listview viewholder

Android ListView ViewHolder

利用adapter中的getView的 contentView 的复用机制进行优化。java

listview的原理

listView,初始化的时候就会使用inflater来渲染这些view(这些是耗费资源的操做), 若是没有优化,每次都会执行这个inflater来渲染。ide

优化的原理

建立一个静态类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;
        }
    }
相关文章
相关标签/搜索