@Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { viewHolder.itemView.setTranslationX(0); viewHolder.itemView.setTranslationY(0); int position = viewHolder.getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { itemSwipeCallback.itemSwiped(position, direction); } }
/** * helper method to get the position from a holder * overwrite this if you have an adapter adding additional items inbetwean * * @param holder the viewHolder of the item * @return the position of the holder */ public int getHolderAdapterPosition(@NonNull RecyclerView.ViewHolder holder) { return holder.getAdapterPosition(); }
public static int safeGetAdapterPosition(@Nullable RecyclerView.ViewHolder holder) { return (holder != null) ? holder.getAdapterPosition() : RecyclerView.NO_POSITION; }
@Override public void run() { if (mRecyclerView != null && mRecyclerView.isAttachedToWindow() && !anim.mOverridden && anim.mViewHolder.getAdapterPosition() != RecyclerView.NO_POSITION) { final RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator(); // if animator is running or we have other active recover animations, we try // not to call onSwiped because DefaultItemAnimator is not good at merging // animations. Instead, we wait and batch. if ((animator == null || !animator.isRunning(null)) && !hasRunningRecoverAnim()) { mCallback.onSwiped(anim.mViewHolder, swipeDir); } else { mRecyclerView.post(this); } } } });
/** * 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); }
@SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean canStartDrag(RecyclerView.ViewHolder holder, int touchX, int touchY) { final int origRootPosition = holder.getAdapterPosition(); final int wrappedItemPosition = WrapperAdapterUtils.unwrapPosition(mRecyclerView.getAdapter(), mWrapperAdapter, null, origRootPosition); if (wrappedItemPosition == RecyclerView.NO_POSITION) { return false; } final View view = holder.itemView; final int translateX = (int) (view.getTranslationX() + 0.5f); final int translateY = (int) (view.getTranslationY() + 0.5f); final int viewX = touchX - (view.getLeft() + translateX); final int viewY = touchY - (view.getTop() + translateY); if (mWrapperAdapter.canStartDrag(holder, wrappedItemPosition, viewX, viewY)) { // NOTE: notifyXXX method might be called inside of the user implemented code. that is not acceptable. return (holder.getAdapterPosition() == origRootPosition); } else { return false; } }
/** * Get the adapter position of current item, * the internal position equals to {@link ViewHolder#getAdapterPosition()}. * <p><b>NOTE</b>: Below v2.3.5 we may provide getPosition() method to get the position, * It exists BUG, and sometimes can not get the correct position, * it is recommended to immediately stop using it and use the new * {@code getPosition(ViewHolder)} instead.</p> * * @param holder The ViewHolder to call holder.getAdapterPosition(). * @return The adapter position. * @since v2.3.5. If below v2.3.5, use {@link ViewHolder#getAdapterPosition()} instead. */ protected final int getPosition(@NonNull final ViewHolder holder) { return holder.getAdapterPosition(); }
@Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { Item item = groupAdapter.getItem(viewHolder.getAdapterPosition()); // Change notification to the adapter happens automatically when the section is // changed. swipeSection.remove(item); } };
/** * 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()); }
/** * 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()); }
private int getWrappedAdapterPosition(RecyclerView.ViewHolder vh) { if (vh == null) { return RecyclerView.NO_POSITION; } return WrapperAdapterUtils.unwrapPosition(mRecyclerView.getAdapter(), mWrapperAdapter, mComposedAdapterTag, vh.getAdapterPosition()); }
public static int getSynchronizedPosition(@NonNull RecyclerView.ViewHolder holder) { int pos1 = holder.getLayoutPosition(); int pos2 = holder.getAdapterPosition(); if (pos1 == pos2) { return pos1; } else { return RecyclerView.NO_POSITION; } }
@Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //Remove swiped item from list and notify the RecyclerView final int position = viewHolder.getAdapterPosition(); final Event event = events.get(viewHolder.getAdapterPosition()); deleteEvent(event, position); }
@Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //Remove swiped item from list and notify the RecyclerView final int position = viewHolder.getAdapterPosition(); final EventTrigger eventTrigger = mEvent.getEventTriggers().get(viewHolder.getAdapterPosition()); deleteEventTrigger (eventTrigger, position); }
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { mAdapter.onBindViewHolder(holder, position); int adapterPosition = holder.getAdapterPosition(); if (!isFirstOnly || adapterPosition > mLastPosition) { for (Animator anim : getAnimators(holder.itemView)) { anim.setDuration(mDuration).start(); anim.setInterpolator(mInterpolator); } mLastPosition = adapterPosition; } else { ViewHelper.clear(holder.itemView); } }
protected long getAddDelay(final RecyclerView.ViewHolder holder) { return Math.abs(holder.getAdapterPosition() * getAddDuration() / 4); }