Skip to content

Instantly share code, notes, and snippets.

@gautier-levert
Created August 24, 2017 14:09
Show Gist options
  • Save gautier-levert/0baa748d80d594a46eb86b5600e6b40c to your computer and use it in GitHub Desktop.
Save gautier-levert/0baa748d80d594a46eb86b5600e6b40c to your computer and use it in GitHub Desktop.
AndroidAnnotations RecyclerViewAdapterBase
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* https://github.com/androidannotations/androidannotations/wiki/Adapters-and-lists#recyclerview-and-viewholder
*/
public abstract class RecyclerViewAdapterBase<T, V extends View> extends RecyclerView.Adapter<ViewWrapper<V>> {
protected List<T> items = new ArrayList<>();
public final void clear() {
final int size = items.size();
items.clear();
notifyItemRangeRemoved(0, size);
}
public final boolean add(T item) {
final boolean result = items.add(item);
notifyItemInserted(items.size() - 1);
return result;
}
public final boolean addAll(Collection<? extends T> items) {
final int position = this.items.size();
final boolean result = this.items.addAll(items);
notifyItemRangeInserted(position, items.size());
return result;
}
public final T getItem(int position) {
return items.get(position);
}
@Override
public final int getItemCount() {
return items.size();
}
@Override
public final ViewWrapper<V> onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewWrapper<>(onCreateItemView(parent, viewType));
}
protected abstract V onCreateItemView(ViewGroup parent, int viewType);
@Override
public final void onBindViewHolder(ViewWrapper<V> viewHolder, int position) {
onBindViewHolder(viewHolder.getView(), items.get(position));
}
protected abstract void onBindViewHolder(V view, T item);
@Override
public final void onBindViewHolder(ViewWrapper<V> holder, int position, List<Object> payloads) {
onBindViewHolder(holder.getView(), items.get(position), payloads);
}
protected void onBindViewHolder(V view, T item, List<Object> payloads) {
onBindViewHolder(view, item);
}
@Override
public final void onViewRecycled(ViewWrapper<V> holder) {
onViewRecycled(holder.getView());
}
protected void onViewRecycled(V view) {
}
@Override
public final boolean onFailedToRecycleView(ViewWrapper<V> holder) {
return onFailedToRecycleView(holder.getView());
}
protected boolean onFailedToRecycleView(V view) {
return false;
}
@Override
public final void onViewAttachedToWindow(ViewWrapper<V> holder) {
onViewAttachedToWindow(holder.getView());
}
protected void onViewAttachedToWindow(V view) {
}
@Override
public final void onViewDetachedFromWindow(ViewWrapper<V> holder) {
onViewDetachedFromWindow(holder.getView());
}
protected void onViewDetachedFromWindow(V view) {
}
}
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* https://github.com/androidannotations/androidannotations/wiki/Adapters-and-lists#recyclerview-and-viewholder
*/
public class ViewWrapper<V extends View> extends RecyclerView.ViewHolder {
private V view;
public ViewWrapper(V itemView) {
super(itemView);
view = itemView;
}
public V getView() {
return view;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment