package uk.co.alt236.btlescan.ui.common.recyclerview;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public abstract class BaseRecyclerViewAdapter extends RecyclerView.Adapter<BaseViewHolder<? extends RecyclerViewItem>> {
private final List<RecyclerViewItem> mItemList;
private final RecyclerViewBinderCore mCore;
public BaseRecyclerViewAdapter(final RecyclerViewBinderCore core,
final List<RecyclerViewItem> items) {
mItemList = new ArrayList<>();
mCore = core;
mItemList.addAll(items);
}
public BaseRecyclerViewAdapter(final RecyclerViewBinderCore core) {
this(core, new ArrayList<RecyclerViewItem>());
}
@Override
public BaseViewHolder<? extends RecyclerViewItem> onCreateViewHolder(final ViewGroup parent,
final int viewType) {
return mCore.create(parent, viewType);
}
@Override
public void onBindViewHolder(final BaseViewHolder<? extends RecyclerViewItem> holder,
final int position) {
final int viewType = getItemViewType(position);
final BaseViewBinder<? extends RecyclerViewItem> binder = mCore.getBinder(viewType);
bind(binder, holder, getItem(position));
}
@Override
public int getItemCount() {
return mItemList.size();
}
@Override
public int getItemViewType(int position) {
return mCore.getViewType(getItem(position));
}
public RecyclerViewItem getItem(final int position) {
return mItemList.get(position);
}
public void setData(Collection<? extends RecyclerViewItem> data) {
mItemList.clear();
mItemList.addAll(data);
notifyDataSetChanged();
}
private static <T extends RecyclerViewItem> void bind(final BaseViewBinder<T> binder,
final BaseViewHolder<?> holder,
final RecyclerViewItem item) {
//noinspection unchecked
binder.bind((BaseViewHolder<T>) holder, (T) item);
}
}