package com.ithooks.android.xreap.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import java.util.List;
/**
* Author: ZhuWenWu
* Version V1.0
* Date: 15/4/11 15:23
* Description:有头和尾的 RecyclerView 适配器基类
* Modification History:
* Date Author Version Description
* -----------------------------------------------------------------------------------
* 15/4/11 ZhuWenWu 1.0 1.0
* Why & What is modified:
*/
public abstract class BaseRecyclerMultipleItemAdapter<T> extends BaseRecyclerAdapter<T> {
public static enum ITEM_TYPE {
ITEM_TYPE_HEADER,
ITEM_TYPE_CONTENT,
ITEM_TYPE_BOTTOM
}
protected int mHeaderCount;//头部View个数
protected int mBottomCount;//底部View个数
public BaseRecyclerMultipleItemAdapter(Context context) {
super(context);
}
public void setHeaderCount(int headerCount) {
this.mHeaderCount = headerCount;
}
public void setBottomCount(int bottomCount) {
this.mBottomCount = bottomCount;
}
public boolean isHeaderView(int position) {
return mHeaderCount != 0 && position < mHeaderCount;
}
public boolean isBottomView(int position) {
return mBottomCount != 0 && position >= (mHeaderCount + getContentItemCount());
}
@Override
public T getItemData(int position) {
int index = position - mHeaderCount;
if (index >= super.getItemCount()) {
return null;
}
return super.getItemData(index);
}
/**
* 移除某一条记录
*
* @param position 移除数据的position 如果有Header需要减去Header数量
*/
public void removeItem(int position) {
if (position < mDataList.size()) {
mDataList.remove(position);
notifyItemRemoved(mHeaderCount + position);
}
}
/**
* 添加一条记录
*
* @param data 需要加入的数据结构
* @param position 插入数据的位置 如果有Header需要减去Header数量
*/
public void addItem(T data, int position) {
if (position <= mDataList.size()) {
mDataList.add(position, data);
notifyItemInserted(mHeaderCount + position);
}
}
/**
* 移除所有记录
*/
public void clearItems() {
int size = mDataList.size();
if (size > 0) {
mDataList.clear();
notifyItemRangeRemoved(mHeaderCount, size);
}
}
/**
* 批量添加记录
*
* @param data 需要加入的数据结构
* @param position 插入数据的位置 如果有Header需要减去Header数量
*/
public void addItems(List<T> data, int position) {
if (position <= mDataList.size() && data != null && data.size() > 0) {
mDataList.addAll(position, data);
notifyItemRangeChanged(mHeaderCount + position, data.size());
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE.ITEM_TYPE_HEADER.ordinal()) {
return onCreateHeaderView(parent);
} else if (viewType == ITEM_TYPE.ITEM_TYPE_CONTENT.ordinal()) {
return onCreateContentView(parent);
} else if (viewType == ITEM_TYPE.ITEM_TYPE_BOTTOM.ordinal()) {
return onCreateBottomView(parent);
}
return null;
}
@Override
public int getItemViewType(int position) {
int dataItemCount = getContentItemCount();
if (mHeaderCount != 0 && position < mHeaderCount) {//头部View
return ITEM_TYPE.ITEM_TYPE_HEADER.ordinal();
} else if (mBottomCount != 0 && position >= (mHeaderCount + dataItemCount)) {//底部View
return ITEM_TYPE.ITEM_TYPE_BOTTOM.ordinal();
} else {
return ITEM_TYPE.ITEM_TYPE_CONTENT.ordinal();
}
}
@Override
public int getItemCount() {
return mHeaderCount + getContentItemCount() + mBottomCount;
}
public abstract RecyclerView.ViewHolder onCreateHeaderView(ViewGroup parent);//创建头部View
public abstract RecyclerView.ViewHolder onCreateContentView(ViewGroup parent);//创建中间内容View
public abstract RecyclerView.ViewHolder onCreateBottomView(ViewGroup parent);//创建底部View
public abstract int getContentItemCount();//获取中间内容个数
}