package com.mcxtzhang.commonadapter.viewgroup.adapter.cache; import android.content.Context; import android.util.Log; import android.view.View; import android.view.ViewGroup; import com.mcxtzhang.commonadapter.R; import com.mcxtzhang.commonadapter.viewgroup.adapter.base.BaseAdapter; import java.util.List; /** * 介绍:V1.5.0 引入 ViewCache概念 * 一个带缓存的基类 * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 2016/12/29. */ public abstract class BaseCacheAdapter<T> extends BaseAdapter<T> { protected IViewCache mViewCache; public BaseCacheAdapter(Context context, List datas) { super(context, datas); mViewCache = new ViewCacheImpl(); } /** * 不必关心从缓存取 还是inflate * * @param parent * @param layoutId * @return */ public ViewHolder getViewHolderByType(ViewGroup parent, int layoutId) { ViewHolder holder = mViewCache.get(layoutId); if (holder == null) { Log.d("TAG", "创建"); View inflate = mInflater.inflate(layoutId, parent, false); ViewHolder holder2 = new ViewHolder(inflate, layoutId); inflate.setTag(R.id.zxt_tag_vh, holder2); return holder2; } Log.d("TAG", "复用"); return holder; } /** * 回收这个View * * @param parent */ @Override public void recycleView(ViewGroup parent, ViewHolder holder) { parent.removeView(holder.itemView); mViewCache.put(holder); } /** * 回收ViewGroups的所有View * * @param parent */ @Override public void recycleViews(ViewGroup parent) { if (parent != null) { int childCount = parent.getChildCount(); if (childCount > 0) { for (int count = childCount - 1; count >= 0; count--) { recycleView(parent, (ViewHolder) parent.getChildAt(count).getTag(R.id.zxt_tag_vh)); } } } } }