package com.pan.materialdrawer.util; import android.support.v7.widget.RecyclerView; import com.pan.materialdrawer.Drawer; import com.pan.materialdrawer.model.interfaces.IDrawerItem; import java.util.HashMap; import java.util.Stack; /** * Created by mikepenz on 18.09.15. */ public class RecyclerViewCacheUtil { private static RecyclerViewCacheUtil SINGLETON = null; private int CACHE_SIZE = 3; private HashMap<String, Stack<RecyclerView.ViewHolder>> CACHE = new HashMap<>(); private RecyclerViewCacheUtil() { } public static RecyclerViewCacheUtil getInstance() { if (SINGLETON == null) { SINGLETON = new RecyclerViewCacheUtil(); } return SINGLETON; } /** * define the amount of elements which should be cached for a specific drawerItem type * * @param cacheSize * @return */ public RecyclerViewCacheUtil withCacheSize(int cacheSize) { CACHE_SIZE = cacheSize; return this; } /** * init the cache with an initialized drawer * * @param drawer */ public void init(Drawer drawer) { if (drawer.getDrawerItems() != null) { init(drawer.getRecyclerView(), drawer.getDrawerItems().toArray(new IDrawerItem[drawer.getDrawerItems().size()])); } } /** * clear the CACHE */ public void clear() { CACHE.clear(); } /** * init the cache on your own. * * @param recyclerView * @param drawerItems */ public void init(RecyclerView recyclerView, IDrawerItem... drawerItems) { if (drawerItems != null) { for (IDrawerItem d : drawerItems) { if (!CACHE.containsKey(d.getType())) { CACHE.put(d.getType(), new Stack<RecyclerView.ViewHolder>()); } if (CACHE_SIZE == -1 || CACHE.get(d.getType()).size() <= CACHE_SIZE) { CACHE.get(d.getType()).push(d.getViewHolder(recyclerView)); } } } } /** * this is used to get a cached drawerItem from the cache or null * * @param type * @return */ public RecyclerView.ViewHolder obtain(String type) { if (CACHE.containsKey(type)) { if (CACHE.get(type).size() > 0) { return CACHE.get(type).pop(); } } return null; } }