服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #

简单通用的ViewHolder

时间:2016-02-09 09:29来源:未知 作者:最模板 点击:
Android开发中经常用到ViewHolder类来进行ListView的缓存,每次都是在Adapter里面写ViewHolder比较麻烦,虽然有ButterKnife可以快速获取View,但是可复用性太差. 查找了网上的一些代码,结合自己目前的
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比较简单,后续需要在做优化.
(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容