Android笔记之Adapter

来源:互联网 发布:淘宝怎么使用农村淘宝 编辑:程序博客网 时间:2024/06/10 07:08

适配器. 顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是
界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现。那么适配器是怎么处理得到的数据,并把它显示出来的呢。其实很简单,说白了适配器它也是一个类,在类里面它实现了父类的这几个方法:

publicint getCount() //得到数据的行数
public Object getItem(int position)//根据position得到某一行的记录
public long getItemId(int position)//得到某一条记录的ID

下面这个方法是最重要的相比于其它几个方法,它显式的定义了,适配器将要以什么样的方式去显示我们所填充的数据,在自定义的适配器里面我们通常会给它写个布局文件
publicView getView(int position, View convertView, ViewGroup parent) 

Android中有个叫做Recycler(反复循环器)的构件,下图是它的工作原理:




ViewHolder只是将需要缓存的那些view封装好,convertView的setTag才是将这些缓存起来供下次调用
当你的listview里布局多样化的时候 viewholder的作用就有比较明显的体现了。 当然了,单一模式的布局一样有性能优化的作用 只是不直观。  假如你2种模式的布局 当发生回收的时候 你会用setTag分别记录是哪两种   这两种模式会被封装到viewholder中进行保存方便你下次使用。 VH就是个静态类 与缓存无关的
以上ConvertView ViewHolder 及 set/getTag 都是性能优化的关键

以下为主要代码
public class MyAdapter extends BaseAdapter {    private LayoutInflater layoutInflater;    private List<ItemBean>  dataList;    public MyAdapter(Context context , List<ItemBean> list) {        layoutInflater = LayoutInflater.from(context);        dataList = list;    }    @Override    public int getCount() {        return dataList.size();    }    @Override    public Object getItem(int position) {        return dataList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null){            holder = new ViewHolder();            //由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null            convertView = layoutInflater.inflate(R.layout.item,null);            holder.img = (ImageView) convertView.findViewById(R.id.iv_image);            holder.title = (TextView) convertView.findViewById(R.id.tv_title);            holder.content = (TextView) convertView.findViewById(R.id.tv_content);            convertView.setTag(holder);        }else {            holder = (ViewHolder) convertView.getTag();        }        //取出bean对象        ItemBean bean = dataList.get(position);        //设置控件的数据        holder.img.setImageResource(bean.itemImage);        holder.title.setText(bean.itemTitle);        holder.content.setText(bean.itemContent);        return convertView;    }

呵呵 自知让人理解有点困难 就当我的学习笔记了!

1 0
原创粉丝点击