Skip to content

Instantly share code, notes, and snippets.

@iChintanSoni
Created July 24, 2017 03:33
Show Gist options
  • Save iChintanSoni/6e9854866eb9d23fcb6d75d8d8f7d3c2 to your computer and use it in GitHub Desktop.
Save iChintanSoni/6e9854866eb9d23fcb6d75d8d8f7d3c2 to your computer and use it in GitHub Desktop.
BaseRecyclerAdapter, a generic Recycler adapter, is an extended version from https://gist.github.com/chintansoni202/3c61aea787ae4bd49f26adee9dd40a08
public class BaseRecyclerAdapter<T, MVH extends BaseViewHolder<T>, EVH extends BaseViewHolder<T>> extends RecyclerView.Adapter<BaseViewHolder<T>> {
private static final int VIEW_TYPE_EMPTY = 0;
private static final int VIEW_TYPE_DATA = 1;
private List<T> list = new ArrayList<>();
@LayoutRes
private int emptyViewLayoutResource;
private Class<EVH> emptyViewHolder;
@LayoutRes
private int dataLayoutResource;
private Class<MVH> dataViewHolder;
public BaseRecyclerAdapter(int emptyViewLayoutResource, Class<EVH> emptyViewHolder, int dataLayoutResource, Class<MVH> dataViewHolder) {
this.emptyViewLayoutResource = emptyViewLayoutResource;
this.emptyViewHolder = emptyViewHolder;
this.dataLayoutResource = dataLayoutResource;
this.dataViewHolder = dataViewHolder;
}
@Override
public BaseViewHolder<T> onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(layoutInflater, viewType == VIEW_TYPE_EMPTY ? emptyViewLayoutResource : dataLayoutResource, parent, false);
try {
return viewType == VIEW_TYPE_EMPTY ? emptyViewHolder.getConstructor(ViewDataBinding.class).newInstance(binding) : dataViewHolder.getConstructor(View.class).newInstance(binding);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
@Override
public void onBindViewHolder(BaseViewHolder<T> holder, int position) {
int viewType = getItemViewType(position);
if (viewType == VIEW_TYPE_EMPTY) {
} else {
holder.bind(list.get(position));
}
}
@Override
public int getItemCount() {
return list.size() == 0 ? 1 : list.size();
}
@Override
public int getItemViewType(int position) {
return list.size() == 0 ? VIEW_TYPE_EMPTY : VIEW_TYPE_DATA;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment