package com.mcxtzhang.commonadapter.viewgroup.adapter.cache;
import android.util.SparseArray;
import android.util.SparseIntArray;
import java.util.ArrayList;
/**
* 介绍:ViewCache的实现类
* 以ItemType(即LayoutId)为key,
* 缓存Views,
* <p>
* 作者:zhangxutong
* 邮箱:mcxtzhang@163.com
* 主页:http://blog.csdn.net/zxt0601
* 时间: 2016/12/29.
*/
public class ViewCacheImpl implements IViewCache {
//以ItemType(即LayoutId)为key, 缓存ViewHolders,
private SparseArray<ArrayList<ViewHolder>> mCachedViews;
//以ItemType(即LayoutId)为key,存储每种缓存的大小
private SparseIntArray mCachedSize;
//默认缓存数量
private static final int DEFAULT_MAX_SIZE = 5;
public ViewCacheImpl() {
mCachedViews = new SparseArray<>();
mCachedSize = new SparseIntArray();
}
@Override
public void put(ViewHolder holder) {
ArrayList<ViewHolder> cacheViews = mCachedViews.get(holder.itemViewType);
if (cacheViews == null) {
cacheViews = new ArrayList<>();
mCachedViews.put(holder.itemViewType, cacheViews);
}
if (cacheViews.size() < getCacheSize(holder.itemViewType)) {
cacheViews.add(holder);
}
}
@Override
public ViewHolder get(int itemType) {
ArrayList<ViewHolder> cacheViews = mCachedViews.get(itemType);
if (null == cacheViews || cacheViews.isEmpty()) {
return null;
} else {
return cacheViews.remove(cacheViews.size() - 1);
}
}
@Override
public void setCacheSize(int itemType, int size) {
ArrayList<ViewHolder> cacheViews = mCachedViews.get(itemType);
if (cacheViews != null) {
while (cacheViews.size() > size) {
cacheViews.remove(cacheViews.size() - 1);
}
}
mCachedSize.put(itemType, size);
}
@Override
public int getCacheSize(int itemType) {
int cacheSize = mCachedSize.get(itemType);
if (cacheSize == 0) {
return DEFAULT_MAX_SIZE;
}
return cacheSize;
}
}