BaseAdapter中的ConverView的作用和ListView的优化

    BaseAdapter中的ConverView的作用和ListView的优化

ListView中的每个item都是一个view,当一个item滑出可视区域是,这个item所对应的view就会被回收,这个view就是converview,如果不适用converview,每次item被移除屏幕时,就会新new一个view给item,加大了开销,所以converview就可以给那些新存现的item重复利用。
关于优化,如果每个item的布局非常复杂,通过findViewById寻找控件无疑会加大系统开销,通过引用Tag,使用getTag获取绑定的ViewHolder对象,ViewHolder对象中存储了布局中的控件,通过ViewHolder来选取控件,避免重重筛选,提高效率。
话不多说,上代码:
private class MyAdapter extends BaseAdapter{

    @Override
    public int getCount()
    {
        return list.size();
    }

    @Override
    public Object getItem(int position)
    {
        return position;
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {   ViewHolder viewHolder;
        LayoutInflater inflater=LayoutInflater.from(getActivity());
        if(convertView==null){
            viewHolder=new ViewHolder();
            convertView =inflater.inflate(R.layout.listitem,null);
            viewHolder.picture=(ImageView)convertView.findViewById(R.id.thumbnail);
            viewHolder.title=(TextView)convertView.findViewById(R.id.title);
            convertView.setTag(viewHolder);
        }
        else{
            viewHolder=(ViewHolder)convertView.getTag();
        }
        viewHolder.picture.setImageBitmap((Bitmap)list.get(position).get("thumbNail"));
        viewHolder.title.setText((String)list.get(position).get("title"));
        return convertView;
    }
}

private class ViewHolder{
ImageView picture;
TextView title;
}
}

你可能感兴趣的:(Android)