/******************************************************************************* * This file is part of RedReader. * * RedReader is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * RedReader is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with RedReader. If not, see <http://www.gnu.org/licenses/>. ******************************************************************************/ package org.quantumbadger.redreader.adapters; import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; /** * Created by veyndan on 18/04/2016. */ public abstract class HeaderRecyclerAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> { private static final int TYPE_HEADER = 0; private static final int TYPE_CONTENT = 1; protected static final int HEADER_SIZE = 1; @Override public VH onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case TYPE_HEADER: return onCreateHeaderItemViewHolder(parent); case TYPE_CONTENT: return onCreateContentItemViewHolder(parent); default: throw new IllegalStateException(); } } protected abstract VH onCreateHeaderItemViewHolder(ViewGroup parent); protected abstract VH onCreateContentItemViewHolder(ViewGroup parent); @Override public void onBindViewHolder(VH holder, int position) { if (position == 0) { onBindHeaderItemViewHolder(holder, position); } else { onBindContentItemViewHolder(holder, position - HEADER_SIZE); } } protected abstract void onBindHeaderItemViewHolder(VH holder, int position); protected abstract void onBindContentItemViewHolder(VH holder, int position); @Override public int getItemCount() { return getContentItemCount() + HEADER_SIZE; } @Override public int getItemViewType(int position) { return position == 0 ? TYPE_HEADER : TYPE_CONTENT; } protected abstract int getContentItemCount(); }