@Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { View itemView = viewHolder.itemView; if (viewHolder.getAdapterPosition() == RecyclerView.NO_POSITION) { return;
/** * 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); }
if (holder == null || holder.getItemId() != mCheckingTouchSlop) { mCheckingTouchSlop = RecyclerView.NO_ID; return false;
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { int viewType = holder.getItemViewType(); if (viewType == TYPE_SERVER_HEADER || viewType == TYPE_CHANNEL) { Map.Entry<Integer, ServerConnectionInfo> entry = mItemIndexToServerMap.floorEntry(position - getServerListStart()); if (viewType == TYPE_SERVER_HEADER) ((ServerHeaderHolder) holder).bind(entry.getValue()); else ((ChannelHolder) holder).bind(entry.getValue(), position - getServerListStart() - entry.getKey() - 1); } else if (viewType == TYPE_MENU_ITEM) { DrawerMenuItem item; if (position >= getBottomMenuItemsStart()) item = mMenuItems.get(position - getBottomMenuItemsStart()); else item = mTopMenuItems.get(position - getTopMenuItemsStart()); ((MenuItemHolder) holder).bind(this, item); } else if (viewType == TYPE_DRAWER_HEADER) { holder.itemView.setPadding(0, mHeaderPaddingTop, 0, 0); } else if (viewType == TYPE_DIVIDER) { ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) holder.itemView.getLayoutParams(); if (position == getTopMenuItemsStart() + mTopMenuItems.size()) p.topMargin = mContext.getResources().getDimensionPixelSize(R.dimen.drawer_search_margin); else p.topMargin = mContext.getResources().getDimensionPixelSize(R.dimen.drawer_divider_margin); holder.itemView.setLayoutParams(p); } }
@Override public void onSwiped(RecyclerView.ViewHolder holder, int swipeDir) { Uri uri = ContentUris.withAppendedId(HistoryProvider.Columns.CONTENT_URI, holder.getItemId()); ContentValues values = null; Cursor cursor = mResolver.query(uri, null, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { values = new ContentValues(); DatabaseUtils.cursorRowToContentValues(cursor, values); } cursor.close(); } mResolver.delete(uri, null, null); if (values != null && mDeleteListener != null) { mDeleteListener.onItemDeleted(values); } }
/** * Binds the {@code holder} according to its selected state using {@link View#setActivated(boolean)}. * * @param jumpToCurrentState When set, the background will have its {@link Drawable#jumpToCurrentState()} called. * In general, this should be true for full binds, and false for partial binds that * contain {@link #PAYLOAD_SELECT}. */ public boolean bind(@NonNull RecyclerView.ViewHolder holder, boolean jumpToCurrentState) { boolean isSelected = isSelected(holder.getItemId()); holder.itemView.setActivated(isSelected); if (jumpToCurrentState) { // Ensure background jumps immediately to the current state. Drawable background = holder.itemView.getBackground(); if (background != null) { background.jumpToCurrentState(); } } return isSelected; }
@Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { switch (viewHolder.getItemViewType()) { case TYPE_HEADER: ((HeaderHolder) viewHolder).bind((position == getInactiveHeaderIndex() ? R.string.server_list_header_inactive : R.string.server_list_header_active)); break; case TYPE_CONNECTED_SERVER: ((ConnectedServerHolder) viewHolder).bind(this, ServerConnectionManager.getInstance(mContext).getConnections().get(position - getActiveHeaderIndex() - 1)); break; case TYPE_INACTIVE_SERVER: ((ServerHolder) viewHolder).bind(this, mFilteredInactiveServers.get(position - getInactiveHeaderIndex() - 1)); break; } }
@Override public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { viewTypeAdapters.get(holder.getItemViewType()).onViewRecycled(holder); }
@Override public boolean hasDivider(RecyclerView parent, View view) { return mRecyclerView.getChildViewHolder(view).getItemViewType() != TYPE_HEADER; }
@Override public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) { viewTypeAdapters.get(holder.getItemViewType()).onViewAttachedToWindow(holder); }
@Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder.getItemViewType() == TYPE_ADD_COLOR) return; if (mResetColor != null) { if (position == 0) { ((ViewHolder) holder).bind(mResetColor); return; } --position; } ((ViewHolder) holder).bind(mColors.get(position)); }
@Override public void onBindViewHolder(RecyclerView.ViewHolder itemHolder, int pos) { int type = itemHolder.getItemViewType(); int userAliases = mManager.getUserAliases().size(); if (type == TYPE_HEADER) { ((HeaderHolder) itemHolder).bind(pos > 0 || userAliases == 0 ? R.string.value_default : R.string.value_custom); } else { userAliases = (userAliases > 0 ? 1 + userAliases : 0); ((ItemHolder) itemHolder).bind(pos > userAliases ? CommandAliasManager.getDefaultAliases().get(pos - 1 - userAliases) : mManager.getUserAliases().get(pos - 1)); } }
private int getItemPosition(MotionEvent e) { final View v = findChildViewUnder(e.getX(), e.getY()); if (v == null) return NO_POSITION; if (v.getTag() == null || !(v.getTag() instanceof ViewHolder)) throw new IllegalStateException("Make sure your adapter makes a call to super.onBindViewHolder(), and doesn't override itemView tags."); final ViewHolder holder = (ViewHolder) v.getTag(); return holder.getAdapterPosition(); }
@Override public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) { DataHelper.deleteItemAsync(realm, viewHolder.getItemId()); }
@NonNull @Override public String toString() { return super.toString() + " '" + mItem + "'"; }
@Override public boolean onFailedToRecycleView(@NonNull RecyclerView.ViewHolder holder) { return viewTypeAdapters.get(holder.getItemViewType()).onFailedToRecycleView(holder); } }
@Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { mAdapter.onItemDismiss(viewHolder.getAdapterPosition()); } }
@Override public void onClick(View view) { // notify and update player sheet handleTap(holder.getAdapterPosition(), false); } });
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { int viewType = holder.getItemViewType(); if (viewType == TYPE_MESSAGE) { ((MessageHolder) holder).bind(mMessages.getMessages().get(position)); } else if (viewType == TYPE_EXPANDABLE_MESSAGE) { ((ExpandableMessageHolder) holder).bind(position, mMessages.getMessages().get(position)); } }
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { int viewType = holder.getItemViewType(); Object msg = getMessage(position); if (viewType == TYPE_MESSAGE || viewType == TYPE_MESSAGE_WITH_NEW_MESSAGE_MARKER) { ((MessageHolder) holder).bind((MessageItem) msg); } else if (viewType == TYPE_DAY_MARKER) { ((DayMarkerHolder) holder).bind((DayMarkerItem) msg); } }