package net.droidlabs.mvvm.recyclerview.binding; import android.databinding.BindingAdapter; import android.support.v7.widget.RecyclerView; import net.droidlabs.mvvm.recyclerview.adapter.BindingRecyclerViewAdapter; import net.droidlabs.mvvm.recyclerview.adapter.binder.ItemBinder; import net.droidlabs.mvvm.recyclerview.adapter.ClickHandler; import net.droidlabs.mvvm.recyclerview.adapter.LongClickHandler; import java.util.Collection; public class RecyclerViewBindings { private static final int KEY_ITEMS = -123; private static final int KEY_CLICK_HANDLER = -124; private static final int KEY_LONG_CLICK_HANDLER = -125; @SuppressWarnings("unchecked") @BindingAdapter("items") public static <T> void setItems(RecyclerView recyclerView, Collection<T> items) { BindingRecyclerViewAdapter<T> adapter = (BindingRecyclerViewAdapter<T>) recyclerView.getAdapter(); if (adapter != null) { adapter.setItems(items); } else { recyclerView.setTag(KEY_ITEMS, items); } } @SuppressWarnings("unchecked") @BindingAdapter("clickHandler") public static <T> void setHandler(RecyclerView recyclerView, ClickHandler<T> handler) { BindingRecyclerViewAdapter<T> adapter = (BindingRecyclerViewAdapter<T>) recyclerView.getAdapter(); if (adapter != null) { adapter.setClickHandler(handler); } else { recyclerView.setTag(KEY_CLICK_HANDLER, handler); } } @SuppressWarnings("unchecked") @BindingAdapter("longClickHandler") public static <T> void setHandler(RecyclerView recyclerView, LongClickHandler<T> handler) { BindingRecyclerViewAdapter<T> adapter = (BindingRecyclerViewAdapter<T>) recyclerView.getAdapter(); if (adapter != null) { adapter.setLongClickHandler(handler); } else { recyclerView.setTag(KEY_LONG_CLICK_HANDLER, handler); } } @SuppressWarnings("unchecked") @BindingAdapter("itemViewBinder") public static <T> void setItemViewBinder(RecyclerView recyclerView, ItemBinder<T> itemViewMapper) { Collection<T> items = (Collection<T>) recyclerView.getTag(KEY_ITEMS); ClickHandler<T> clickHandler = (ClickHandler<T>) recyclerView.getTag(KEY_CLICK_HANDLER); BindingRecyclerViewAdapter<T> adapter = new BindingRecyclerViewAdapter<>(itemViewMapper, items); if(clickHandler != null) { adapter.setClickHandler(clickHandler); } recyclerView.setAdapter(adapter); } }