package com.android.chmo.ui.adpater; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; public abstract class BaseAdapter extends RecyclerView.Adapter { private List headerViews; private List footerViews; public BaseAdapter() { headerViews = new ArrayList<>(); footerViews = new ArrayList<>(); } public void addHeaderView(View view) { headerViews.add(view); } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { if (i < headerViews.size()) { return new HeaderFooterHolder(headerViews.get(i)); } else if (i < (headerViews.size() + getDataCount())) { return getViewHolder(viewGroup, i - headerViews.size()); } else { return new HeaderFooterHolder(footerViews.get(i - headerViews.size() - getDataCount())); } } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) { if (i >= headerViews.size() && i < (headerViews.size() + getDataCount())) { updateViewHolder((VH) viewHolder, i - headerViews.size()); } } @Override public int getItemCount() { return getDataCount() + headerViews.size() + footerViews.size(); } @Override public int getItemViewType(int position) { return position; } protected abstract int getDataCount(); protected abstract VH getViewHolder(@NonNull ViewGroup viewGroup, int position); protected abstract void updateViewHolder(@NonNull VH holder, int position); class HeaderFooterHolder extends RecyclerView.ViewHolder { public HeaderFooterHolder(@NonNull View itemView) { super(itemView); } } }