Skip to content

Instantly share code, notes, and snippets.

@leeuwte
Created October 21, 2015 10:02
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leeuwte/644df2d3bb9858e5b67c to your computer and use it in GitHub Desktop.
Save leeuwte/644df2d3bb9858e5b67c to your computer and use it in GitHub Desktop.
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by benny on 15/10/15.
*/
public abstract class HeaderFooterAdapter<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static final int FOOTER = 8769;
public static final int HEADER = 2364;
private View footerView;
private View headerView;
public void setFooterView(View footer) {
ViewGroup vparent = (ViewGroup) footer.getParent();
if (vparent != null) {
vparent.removeView(footer);
}
this.footerView = footer;
}
public void setHeaderView(View header) {
ViewGroup vparent = (ViewGroup) header.getParent();
if (vparent != null) {
vparent.removeView(header);
}
this.headerView = header;
}
@Override
public final RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == FOOTER) {
return new RecyclerView.ViewHolder(footerView) {
};
}
if (viewType == HEADER) {
return new RecyclerView.ViewHolder(headerView) {
};
}
return onCreateItemViewHolder(parent, viewType);
}
@Override
public final void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (getItemViewType(position) != FOOTER && getItemViewType(position) != HEADER) {
onBindItemViewHolder((T) holder, getItemPosition(position));
}
}
private int getItemPosition(int position) {
if (headerView != null)
return position - 1;
return position;
}
@Override
public final int getItemViewType(int position) {
if (headerView != null && position == 0) {
return HEADER;
} else if (footerView != null && position == getItemCount() - 1) {
return FOOTER;
} else {
return getItemsViewType(position);
}
}
@Override
public final int getItemCount() {
int cnt = getItemsCount();
if (headerView != null)
cnt++;
if (footerView != null)
cnt++;
return cnt;
}
public abstract int getItemsCount();
protected abstract int getItemsViewType(int position);
protected abstract T onCreateItemViewHolder(ViewGroup parent, int viewType);
protected abstract void onBindItemViewHolder(T holder, int position);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment