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;
        }
    }
相關文章
相關標籤/搜索