package com.mcxtzhang.commonadapter.rv; import android.support.v7.widget.RecyclerView; /** * 介绍:新HeaderFooter Adapter,优化头部数据绑定 参考DataBinding思想 分离数据绑定 和 View层 * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 17/01/08. */ public class HeaderFooterAdapter extends HeaderRecyclerAndFooterWrapperAdapter { public HeaderFooterAdapter(RecyclerView.Adapter mInnerAdapter) { super(mInnerAdapter); } /** * 添加HeaderView */ public void addHeaderView(IHeaderHelper headerHelper) { mHeaderDatas.add(new HeaderData(headerHelper.getItemLayoutId(), headerHelper)); } /** * 添加HeaderView * * @param cacheSize 该种headerView在缓存池中的缓存个数 */ public void addHeaderView(IHeaderHelper headerHelper, int cacheSize) { mHeaderDatas.add(new HeaderData(headerHelper.getItemLayoutId(), headerHelper, cacheSize)); } /** * 设置某个位置的HeaderView * * @param headerPos 从0开始,如果pos过大 就是addHeaderview */ public void setHeaderView(int headerPos, IHeaderHelper headerHelper) { if (mHeaderDatas.size() > headerPos) { mHeaderDatas.get(headerPos).setLayoutId(headerHelper.getItemLayoutId()); mHeaderDatas.get(headerPos).setData(headerHelper); } else if (mHeaderDatas.size() == headerPos) {//调用addHeaderView addHeaderView(headerHelper); } else { // addHeaderView(headerHelper); } } /** * 设置某个位置的HeaderView * * @param headerPos 从0开始,如果pos过大 就是addHeaderview * @param cacheSize 该种headerView在缓存池中的缓存个数 */ public void setHeaderView(int headerPos, IHeaderHelper headerHelper, int cacheSize) { if (mHeaderDatas.size() > headerPos) { /* SparseArrayCompat headerContainer = new SparseArrayCompat(); headerContainer.put(layoutId, data); mHeaderDatas.setValueAt(headerPos, headerContainer);*/ mHeaderDatas.get(headerPos).setLayoutId(headerHelper.getItemLayoutId()); mHeaderDatas.get(headerPos).setData(headerHelper); mHeaderDatas.get(headerPos).setCacheSize(cacheSize); } else if (mHeaderDatas.size() == headerPos) {//调用addHeaderView addHeaderView(headerHelper, cacheSize); } else { // addHeaderView(headerHelper, cacheSize); } } @Override protected void onBindHeaderHolder(ViewHolder holder, int headerPos, int layoutId, Object o) { if (o instanceof IHeaderHelper) { IHeaderHelper headerHelper = (IHeaderHelper) o; headerHelper.onBind(holder); } } }