Skip to content

Instantly share code, notes, and snippets.

@runemart
Created February 19, 2016 08:47
Show Gist options
  • Save runemart/4b7a6b98dfbb269825c5 to your computer and use it in GitHub Desktop.
Save runemart/4b7a6b98dfbb269825c5 to your computer and use it in GitHub Desktop.
RecyclerView for AndroidAnnotations
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;
public abstract class RecyclerViewAdapterBase<D, V extends View & ViewWrapper.Binder<D>> extends RecyclerView.Adapter<ViewWrapper<D, V>> {
protected List<D> items = new ArrayList<>();
private OnItemClickListener<D, V> listener;
public void setOnItemClickListener(OnItemClickListener<D, V> listener) {
this.listener = listener;
}
@Override
public final ViewWrapper<D, 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<D, V> viewHolder, final int position) {
final V view = viewHolder.getView();
final D data = items.get(position);
view.bind(data);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClick(position, view, data);
}
});
}
public void onItemClick(int position, V view, D data) {
if (listener != null)
listener.onItemClick(position, view, data);
}
@Override
public int getItemCount() {
return items.size();
}
public void add(D item) {
items.add(item);
notifyDataSetChanged();
}
public void addAll(Collection<D> collection) {
items.addAll(collection);
notifyDataSetChanged();
}
public void clear() {
items.clear();
notifyDataSetChanged();
}
public interface OnItemClickListener<D, V> {
void onItemClick(int position, V view, D data);
}
}
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class ViewWrapper<D, V extends View & ViewWrapper.Binder<D>> extends RecyclerView.ViewHolder {
private V view;
public ViewWrapper(V itemView) {
super(itemView);
view = itemView;
}
public V getView() {
return view;
}
public interface Binder<D> {
void bind(D data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment