package trikita.anvil;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import java.util.List;
public abstract class RenderableRecyclerViewAdapter
extends RecyclerView.Adapter<RenderableRecyclerViewAdapter.MountHolder> {
public static <T> RenderableRecyclerViewAdapter withItems(final List<T> items,
final RenderableAdapter.Item<T> r) {
return new RenderableRecyclerViewAdapter() {
{
setHasStableIds(false);
}
public int getItemCount() {
return items.size();
}
public int getItemViewType(int pos) {
Object item = items.get(pos);
return item == null ? 0 : item.getClass().hashCode();
}
public void view(RecyclerView.ViewHolder holder) {
int i = holder.getLayoutPosition();
r.view(i, items.get(i));
}
};
}
@Override
public MountHolder onCreateViewHolder(ViewGroup parent, int viewType) {
FrameLayout root = new FrameLayout(parent.getContext());
root.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
return new MountHolder(root);
}
@Override
public void onBindViewHolder(final MountHolder h, int position) {
if (h.mount == null) {
h.mount = new Anvil.Mount((ViewGroup) h.itemView, new Anvil.Renderable() {
public void view() {
RenderableRecyclerViewAdapter.this.view(h);
}
});
Anvil.render(h.mount);
} else {
Anvil.render(h.mount);
}
}
@Override
public long getItemId(int pos) {
return pos; // just a most common implementation
}
public static class MountHolder extends RecyclerView.ViewHolder {
private Anvil.Mount mount;
public MountHolder(ViewGroup itemView) {
super(itemView);
}
}
public abstract void view(RecyclerView.ViewHolder holder);
}