Created
July 24, 2017 03:33
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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