private @NonNull ItemViewBinder getRawBinderByViewHolder(@NonNull ViewHolder holder) { return typePool.getItemViewBinder(holder.getItemViewType()); }
@Override @SuppressWarnings("unchecked") public final void onBindViewHolder(ViewHolder holder, int position, @NonNull List<Object> payloads) { Object item = items.get(position); ItemViewBinder binder = typePool.getItemViewBinder(holder.getItemViewType()); binder.onBindViewHolder(holder, item, payloads); }
/** * Binds the data to the created ViewHolder and sets the listeners to the holder.itemView * Note that you should use the `onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads` * as it allows you to implement a more efficient adapter implementation * * @param holder the viewHolder we bind the data on * @param position the global position */ @Override @SuppressWarnings("unchecked") public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { if (mLegacyBindViewMode) { if (mVerbose) { Log.v(TAG, "onBindViewHolderLegacy: " + position + "/" + holder.getItemViewType() + " isLegacy: true"); } //set the R.id.fastadapter_item_adapter tag to the adapter so we always have the proper bound adapter available holder.itemView.setTag(R.id.fastadapter_item_adapter, this); //now we bind the item to this viewHolder mOnBindViewHolderListener.onBindViewHolder(holder, position, Collections.EMPTY_LIST); } }
/** * Must be called from{@link RecyclerView.Adapter#onBindViewHolder(RecyclerView.ViewHolder, int, * List)} * * @param items Adapter's data source * @param position the position in data source * @param holder the ViewHolder to bind * @param payloads A non-null list of merged payloads. Can be empty list if requires full update. * @throws NullPointerException if no AdapterDelegate has been registered for ViewHolders * viewType */ public void onBindViewHolder(@NonNull T items, int position, @NonNull RecyclerView.ViewHolder holder, List payloads) { AdapterDelegate<T> delegate = getDelegateForViewType(holder.getItemViewType()); if (delegate == null) { throw new NullPointerException("No delegate found for item at position = " + position + " for viewType = " + holder.getItemViewType()); } delegate.onBindViewHolder(items, position, holder, payloads != null ? payloads : PAYLOADS_EMPTY_LIST); }
/** * Binds the data to the created ViewHolder and sets the listeners to the holder.itemView * * @param holder the viewHolder we bind the data on * @param position the global position * @param payloads the payloads for the bindViewHolder event containing data which allows to improve view animating */ @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List<Object> payloads) { //we do not want the binding to happen twice (the legacyBindViewMode if (!mLegacyBindViewMode) { if (mVerbose) Log.v(TAG, "onBindViewHolder: " + position + "/" + holder.getItemViewType() + " isLegacy: false"); //set the R.id.fastadapter_item_adapter tag to the adapter so we always have the proper bound adapter available holder.itemView.setTag(R.id.fastadapter_item_adapter, this); //now we bind the item to this viewHolder mOnBindViewHolderListener.onBindViewHolder(holder, position, payloads); } super.onBindViewHolder(holder, position, payloads); }
/** * Must be called from {@link RecyclerView.Adapter#onViewRecycled(RecyclerView.ViewHolder)} * * @param holder The ViewHolder for the view being recycled */ public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { AdapterDelegate<T> delegate = getDelegateForViewType(holder.getItemViewType()); if (delegate == null) { throw new NullPointerException("No delegate found for " + holder + " for item at position = " + holder.getAdapterPosition() + " for viewType = " + holder.getItemViewType()); } delegate.onViewRecycled(holder); }
/** * Must be called from {@link RecyclerView.Adapter#onViewAttachedToWindow(RecyclerView.ViewHolder)} * * @param holder Holder of the view being attached */ public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) { AdapterDelegate<T> delegate = getDelegateForViewType(holder.getItemViewType()); if (delegate == null) { throw new NullPointerException("No delegate found for " + holder + " for item at position = " + holder.getAdapterPosition() + " for viewType = " + holder.getItemViewType()); } delegate.onViewAttachedToWindow(holder); }
/** * Must be called from {@link RecyclerView.Adapter#onViewDetachedFromWindow(RecyclerView.ViewHolder)} * * @param holder Holder of the view being attached */ public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) { AdapterDelegate<T> delegate = getDelegateForViewType(holder.getItemViewType()); if (delegate == null) { throw new NullPointerException("No delegate found for " + holder + " for item at position = " + holder.getAdapterPosition() + " for viewType = " + holder.getItemViewType()); } delegate.onViewDetachedFromWindow(holder); }
/** * is called when the ViewHolder is in a transient state. return true if you want to reuse * that view anyways * * @param holder the viewHolder for the view which failed to recycle * @return true if we want to recycle anyways (false - it get's destroyed) */ @Override public boolean onFailedToRecycleView(RecyclerView.ViewHolder holder) { if (mVerbose) Log.v(TAG, "onFailedToRecycleView: " + holder.getItemViewType()); return mOnBindViewHolderListener.onFailedToRecycleView(holder, holder.getAdapterPosition()) || super.onFailedToRecycleView(holder); }
/** * is called in onViewAttachedToWindow when the view is detached from the window * * @param holder the viewHolder for the view which got detached */ @Override public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { if (mVerbose) Log.v(TAG, "onViewAttachedToWindow: " + holder.getItemViewType()); super.onViewAttachedToWindow(holder); mOnBindViewHolderListener.onViewAttachedToWindow(holder, holder.getAdapterPosition()); }
/** * Unbinds the data to the already existing ViewHolder and removes the listeners from the holder.itemView * * @param holder the viewHolder we unbind the data from */ @Override public void onViewRecycled(RecyclerView.ViewHolder holder) { if (mVerbose) Log.v(TAG, "onViewRecycled: " + holder.getItemViewType()); super.onViewRecycled(holder); mOnBindViewHolderListener.unBindViewHolder(holder, holder.getAdapterPosition()); }
/** * {@inheritDoc} */ @Override public boolean onFailedToRecycleView(@NonNull VH holder) { return onFailedToRecycleView(holder, holder.getItemViewType()); }
/** * {@inheritDoc} */ @Override public void onViewDetachedFromWindow(@NonNull VH holder) { onViewDetachedFromWindow(holder, holder.getItemViewType()); }
/** * {@inheritDoc} */ @Override public void onViewAttachedToWindow(@NonNull VH holder) { onViewAttachedToWindow(holder, holder.getItemViewType()); }
/** * is called in onViewDetachedFromWindow when the view is detached from the window * * @param holder the viewHolder for the view which got detached */ @Override public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { if (mVerbose) Log.v(TAG, "onViewDetachedFromWindow: " + holder.getItemViewType()); super.onViewDetachedFromWindow(holder); mOnBindViewHolderListener.onViewDetachedFromWindow(holder, holder.getAdapterPosition()); }
/** * {@inheritDoc} */ @Override public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { onViewRecycled(holder, holder.getItemViewType()); }
/** * {@inheritDoc} */ @Override public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) { onViewDetachedFromWindow(holder, holder.getItemViewType()); }
/** * {@inheritDoc} */ @Override public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) { onViewAttachedToWindow(holder, holder.getItemViewType()); }
/** * {@inheritDoc} */ @Override public boolean onFailedToRecycleView(@NonNull RecyclerView.ViewHolder holder) { return onFailedToRecycleView(holder, holder.getItemViewType()); }
/** * {@inheritDoc} */ @Override public void onViewRecycled(@NonNull VH holder) { onViewRecycled(holder, holder.getItemViewType()); }