本文介绍通过抽象ViewHolder和BaseAdapter来简化我们重写BaseAdapter时的步骤
前提描述:
我们在使用ListView时自然要用ViewHolder来优化ListView,步骤往往是,1.继承BaseAdapter,2.创建一个ViewHolder类,3.在getView中做处理
当我们app有很多很多个ListView或者GridView时,写很多很多BaseAdapter就是个麻烦事了...
既然ViewHolder都是类似的,我们何不把他抽象出来。还有BaseAdapter也可以在抽象一层出来,会省很多事哦。
抽象共同的ViewHolder
ViewHolder的工作是完成ViewHolder下面定义的各种子控件,并在必要的时候把这个ViewHolder setTag给getView 的 convertView中,复用的时候再拿出来继续用。除此之外就没有其他的工作了。回想一下常规的写法,我们需要在getView中用LayoutInflate.from(this).inflate()去初始化ViewHolder。所以ViewHolder初始化的方法不能少,初始化的时候需要根据layoutId,所有得有一个接口留给子类调用。
抽象ViewHolder
——view viewInflate(context,viewgroup,attach)
——getItemLayout() 留给子类实现的接口,届时传递一个布局的id经来,用来初始化ViewHolder
初始化的控件需要放在一个容器中暂时存起来
容器ViewHolder
——容器
——View 当前视图
——根据当前视图找自己的子控件
CommonViewHolder.java (抽象的ViewHolder)
public abstract class CommonViewHolder {
private Context mContext;
/**
* 当前项的view