Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.01 KB | None | 0 0
  1. package ru.yarmiit.ztrap.mvp.ui.adapters.realm;
  2.  
  3. import android.databinding.DataBindingUtil;
  4. import android.databinding.ViewDataBinding;
  5. import android.support.annotation.LayoutRes;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.util.Log;
  8. import android.view.LayoutInflater;
  9. import android.view.ViewGroup;
  10.  
  11. import java.util.Arrays;
  12. import java.util.List;
  13.  
  14. import io.realm.OrderedCollectionChangeSet;
  15. import io.realm.OrderedRealmCollectionChangeListener;
  16. import io.realm.RealmObject;
  17. import io.realm.RealmResults;
  18. import ru.yarmiit.ztrap.mvp.analytics.Events;
  19. import ru.yarmiit.ztrap.mvp.ui.adapters.abs.AbstractHolder;
  20.  
  21. /**
  22.  * @author zTrap
  23.  * @date 16.04.2017.
  24.  */
  25. @SuppressWarnings("ConstantConditions, unchecked")
  26. public abstract class AbstractRealmAdapter<T extends RealmObject, H extends AbstractHolder>
  27.         extends RecyclerView.Adapter<H> {
  28.    
  29.     protected RealmResults<T> mItems;
  30.    
  31.     protected OrderedRealmCollectionChangeListener<RealmResults<T>> mListener = (collection, changeSet) -> {
  32.         if (changeSet == null){
  33.             notifyDataSetChanged();
  34.             return;
  35.         }
  36.    
  37.         for (OrderedCollectionChangeSet.Range range : changeSet.getDeletionRanges()) {
  38.             notifyItemRangeRemoved(range.startIndex, range.length);
  39.         }
  40.    
  41.         for (OrderedCollectionChangeSet.Range range : changeSet.getInsertionRanges()) {
  42.             notifyItemRangeInserted(range.startIndex, range.length);
  43.         }
  44.    
  45.         for (OrderedCollectionChangeSet.Range range : changeSet.getChangeRanges()) {
  46.             notifyItemRangeChanged(range.startIndex, range.length);
  47.         }
  48.     };
  49.    
  50.     protected AbstractRealmAdapter(){
  51.         setHasStableIds(true);
  52.         mItems = getRealmItems();
  53.     }
  54.    
  55.     @Override
  56.     public long getItemId(int index) {
  57.         return index;
  58.     }
  59.    
  60.     @Override
  61.     public void onAttachedToRecyclerView(final RecyclerView recyclerView) {
  62.         mItems.addChangeListener(mListener);
  63.     }
  64.    
  65.     @Override
  66.     public void onDetachedFromRecyclerView(final RecyclerView recyclerView) {
  67.         mItems.removeChangeListener(mListener);
  68.     }
  69.    
  70.     protected final <V extends ViewDataBinding> V createBinding(@LayoutRes int layoutId, ViewGroup parent) {
  71.         return DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), layoutId, parent, false);
  72.     }
  73.    
  74.     protected abstract RealmResults<T> getRealmItems();
  75.    
  76.     @Override
  77.     public final void onBindViewHolder(H holder, int position) {
  78.         T item = mItems.get(position);
  79.         if (!item.isValid()){
  80.             Events.log(getClass().getSimpleName() + ", item is invalid");
  81.             return;
  82.         }
  83.         holder.fillHolder(item);
  84.     }
  85.    
  86.     public List<T> getItems() {
  87.         return mItems;
  88.     }
  89.    
  90.     @Override
  91.     public final int getItemCount() {
  92.         return mItems == null ? 0 : mItems.size();
  93.     }
  94.    
  95.     public final boolean isEmpty(){
  96.         return getItemCount() == 0;
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement