Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.yarmiit.ztrap.mvp.ui.adapters.realm;
- import android.databinding.DataBindingUtil;
- import android.databinding.ViewDataBinding;
- import android.support.annotation.LayoutRes;
- import android.support.v7.widget.RecyclerView;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.ViewGroup;
- import java.util.Arrays;
- import java.util.List;
- import io.realm.OrderedCollectionChangeSet;
- import io.realm.OrderedRealmCollectionChangeListener;
- import io.realm.RealmObject;
- import io.realm.RealmResults;
- import ru.yarmiit.ztrap.mvp.analytics.Events;
- import ru.yarmiit.ztrap.mvp.ui.adapters.abs.AbstractHolder;
- /**
- * @author zTrap
- * @date 16.04.2017.
- */
- @SuppressWarnings("ConstantConditions, unchecked")
- public abstract class AbstractRealmAdapter<T extends RealmObject, H extends AbstractHolder>
- extends RecyclerView.Adapter<H> {
- protected RealmResults<T> mItems;
- protected OrderedRealmCollectionChangeListener<RealmResults<T>> mListener = (collection, changeSet) -> {
- if (changeSet == null){
- notifyDataSetChanged();
- return;
- }
- for (OrderedCollectionChangeSet.Range range : changeSet.getDeletionRanges()) {
- notifyItemRangeRemoved(range.startIndex, range.length);
- }
- for (OrderedCollectionChangeSet.Range range : changeSet.getInsertionRanges()) {
- notifyItemRangeInserted(range.startIndex, range.length);
- }
- for (OrderedCollectionChangeSet.Range range : changeSet.getChangeRanges()) {
- notifyItemRangeChanged(range.startIndex, range.length);
- }
- };
- protected AbstractRealmAdapter(){
- setHasStableIds(true);
- mItems = getRealmItems();
- }
- @Override
- public long getItemId(int index) {
- return index;
- }
- @Override
- public void onAttachedToRecyclerView(final RecyclerView recyclerView) {
- mItems.addChangeListener(mListener);
- }
- @Override
- public void onDetachedFromRecyclerView(final RecyclerView recyclerView) {
- mItems.removeChangeListener(mListener);
- }
- protected final <V extends ViewDataBinding> V createBinding(@LayoutRes int layoutId, ViewGroup parent) {
- return DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutId, parent, false);
- }
- protected abstract RealmResults<T> getRealmItems();
- @Override
- public final void onBindViewHolder(H holder, int position) {
- T item = mItems.get(position);
- if (!item.isValid()){
- Events.log(getClass().getSimpleName() + ", item is invalid");
- return;
- }
- holder.fillHolder(item);
- }
- public List<T> getItems() {
- return mItems;
- }
- @Override
- public final int getItemCount() {
- return mItems == null ? 0 : mItems.size();
- }
- public final boolean isEmpty(){
- return getItemCount() == 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement