Android开发中经常用到ViewHolder类来进行ListView的缓存,每次都是在Adapter里面写ViewHolder比较麻烦,虽然有ButterKnife可以快速获取View,但是可复用性太差.
查找了网上的一些代码,结合自己目前的需要,写了一个目前项目中使用的ViewHolder,代码如下:
/**
* 通用的ViewHolder
* Created by Administrator on 2016/1/18 0018.
*/
public class ViewHolder {
private View convertView;
private SparseArray<View> views;
private ViewHolder(Context context, ViewGroup parent, int layoutId){
this.views = new SparseArray<>();
convertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
convertView.setTag(this);
}
/**
* 获取ViewHolder实例
* @param context 上下文
* @param convertView item的根view
* @param parent 父类容器
* @param layoutId item布局资源文件id
* @return ViewHolder实例
*/
public static ViewHolder getHolder(Context context, View convertView, ViewGroup parent, int layoutId){
if (convertView == null){
return new ViewHolder(context, parent, layoutId);
}
return (ViewHolder) convertView.getTag();
}
/**
* 获取View
* @param id view的id
* @param <T> View的实际类型
* @return
*/
public <T extends View> T get(int id) {
View childView = views.get(id);
if (childView == null) {
childView = convertView.findViewById(id);
views.put(id, childView);
}
return (T) childView;
}
/**
* 获取item布局的根View
* @return
*/
public View getConvertView(){
return convertView;
}
目前该ViewHolder比较简单,后续需要在做优化.
(责任编辑:好模板) |