package com.koushikdutta.boilerplate.recyclerview; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.LinkedHashMap; /** * Created by koush on 4/19/15. */ public class HeaderViewAdapter extends RecyclerView.Adapter<HeaderViewAdapter.ViewHolder> { private static class Header { View view; int viewType; } ArrayList<Header> headers = new ArrayList<Header>(); int viewTypeCount; public void addHeaderView(int index, View header) { Header h = new Header(); h.view = header; h.viewType = viewTypeCount++; headers.add(index, h); notifyDataSetChanged(); } public class ViewHolder extends RecyclerView.ViewHolder implements GridRecyclerView.SpanningViewHolder { public ViewHolder(View itemView) { super(itemView); } @Override public int getSpanSize(int spanCount) { return spanCount; } } @Override public int getItemViewType(int position) { return headers.get(position).viewType; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { for (Header h: headers) { if (h.viewType == viewType) return new ViewHolder(h.view); } throw new AssertionError("unexpected viewtype"); } @Override public void onBindViewHolder(ViewHolder holder, int position) { } @Override public int getItemCount() { return headers.size(); } }