static int getItemPosition(@Nullable RecyclerView.Adapter adapter, long itemId, int itemPositionGuess) { if (adapter == null) return RecyclerView.NO_POSITION; final int itemCount = adapter.getItemCount(); if (itemPositionGuess >= 0 && itemPositionGuess < itemCount) { if (adapter.getItemId(itemPositionGuess) == itemId) return itemPositionGuess; } for (int i = 0; i < itemCount; i++) { if (adapter.getItemId(i) == itemId) return i; } return RecyclerView.NO_POSITION; }
@Override public void run() { int selectedCount = getSelectedCount(); if (selectedCount > 0) { // Build list of all selected ids that are still present. List<Long> selectedIds = new ArrayList<>(selectedCount); for (int i = 0; i < mAdapter.getItemCount(); i++) { long id = mAdapter.getItemId(i); if (isSelected(id)) { selectedIds.add(id); } } // Build set of missing ids. HashSet<Long> missingIds = new HashSet<>(selectedCount); for (long previouslySelectedId : getSelectedIds()) { missingIds.add(previouslySelectedId); } missingIds.removeAll(selectedIds); // Unselect all missing ids. mNotifyItemChanges = false; for (Long missingId : missingIds) { setSelected(missingId, false); } mNotifyItemChanges = true; } } }
public void moveItem(long itemId, int toColumn, int toRow, boolean scrollToItem) { for (int i = 0; i < mLists.size(); i++) { RecyclerView.Adapter adapter = mLists.get(i).getAdapter(); final int count = adapter.getItemCount(); for (int j = 0; j < count; j++) { long id = adapter.getItemId(j); if (id == itemId) { moveItem(i, j, toColumn, toRow, scrollToItem); return; } } } }
public void setItemChecked(int position, boolean value) { // Start selection mode if needed. We don't need to if we're unchecking something. if (value) { startSupportActionModeIfNeeded(); } boolean oldValue = checkStates.get(position); checkStates.put(position, value); if (oldValue != value) { final long id = adapter.getItemId(position); if (checkedIdStates != null) { if (value) { checkedIdStates.put(id, position); } else { checkedIdStates.delete(id); } } if (value) { checkedItemCount++; } else { checkedItemCount--; } adapter.notifyItemChanged(position, SELECTION_PAYLOAD); if (choiceActionMode != null) { multiChoiceModeCallback.onItemCheckedStateChanged(choiceActionMode, position, id, value); if (checkedItemCount == 0) { choiceActionMode.finish(); } } } }
protected void notifyItemChanged(long id) { if (mNotifyItemChanges) { int position = RecyclerView.NO_POSITION; // Look up the item position using findViewHolderForItemId(). // This is fast and will work in most scenarios. RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForItemId(id); if (holder != null) { position = holder.getAdapterPosition(); } // RecyclerView can cache views offscreen that are not found by findViewHolderForItemId() et al, // but will be reattached without being rebound, so the adapter items must be iterated. // This is slower but prevents inconsistencies at the edges of the RecyclerView. if (position == RecyclerView.NO_POSITION) { for (int i = 0; i < mAdapter.getItemCount(); i++) { if (mAdapter.getItemId(i) == id) { position = i; break; } } } if (position != RecyclerView.NO_POSITION) { mAdapter.notifyItemChanged(position, PAYLOAD_SELECT); } } }
public void startLongPressSelect() { clearSelection(); ((ChatMessagesAdapter) mRecyclerView.getAdapter()).clearSelection(); if (!mLastTouchInText && mMultiSelectListener != null) { mMultiSelectListener.startSelectMode(mRecyclerView.getAdapter().getItemId( getItemPosition(mLastTouchTextId))); return; } TextView textView = findTextViewByItemId(mLastTouchTextId); if (textView == null) return; mSelectionLongPressMode = true; mSelectionLongPressId = mLastTouchTextId; long sel = TextSelectionHelper.getWordAt(textView.getText(), mLastTouchTextOffset, mLastTouchTextOffset + 1); mSelectionLongPressStart = TextSelectionHelper.unpackTextRangeStart(sel); mSelectionLongPressEnd = TextSelectionHelper.unpackTextRangeEnd(sel); setSelection(mSelectionLongPressId, mSelectionLongPressStart, mSelectionLongPressId, mSelectionLongPressEnd); mRecyclerView.getParent().requestDisallowInterceptTouchEvent(true); }
@Override public long getItemId(int position) { return position == adapter.getItemCount() ? NO_ID : adapter.getItemId(position); }
@Override public final long getItemId(final int position) { return wrappedAdapter.getItemId(position); }
@Override public long getItemId(int position) { return wrapped.getItemId(position); }
@Override public long getItemId(int position) { return super.getItemId(position); } }
@Override public long getItemId(int position) { return super.getItemId(position); }
@Override public boolean showContextMenuForChild(View originalView) { final int longPressPosition = getChildLayoutPosition(originalView); if (longPressPosition >= 0) { final long longPressId = getAdapter().getItemId(longPressPosition); mContextMenuInfo = new RecyclerViewContextMenuInfo(longPressPosition, longPressId); return super.showContextMenuForChild(originalView); } return false; }
public LongPressSelectTouchListener(RecyclerView recyclerView) { mRecyclerView = recyclerView; mScroller = new RecyclerViewScrollerRunnable(recyclerView, (int scrollDir) -> { LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager(); updateHighlightedElements(mRecyclerView, mRecyclerView.getAdapter().getItemId( scrollDir > 0 ? llm.findLastCompletelyVisibleItemPosition() : llm.findFirstCompletelyVisibleItemPosition())); }); }
/** * overwrite the getItemId to correctly return the value from the FastAdapter * * @param position * @return */ @Override public long getItemId(int position) { if (shouldInsertItemAtPosition(position)) { return getItem(position).getIdentifier(); } else { return mAdapter.getItemId(position - itemInsertedBeforeCount(position)); } }
/** * {@inheritDoc} */ @Override public long getItemId(int position) { final long segmentedPosition = getSegmentedPosition(position); final int segment = AdaptersSet.extractSegment(segmentedPosition); final int offset = AdaptersSet.extractSegmentOffset(segmentedPosition); final RecyclerView.Adapter adapter = mAdaptersSet.getAdapter(segment); final int rawViewType = adapter.getItemViewType(offset); final long rawId = adapter.getItemId(offset); final int wrappedViewType = mViewTypeTranslator.wrapItemViewType(segment, rawViewType); final int wrappedSegment = ItemViewTypeComposer.extractSegmentPart(wrappedViewType); return ItemIdComposer.composeSegment(wrappedSegment, rawId); }
/** * {@inheritDoc} */ @Override public long getItemId(int position) { return mWrappedAdapter.getItemId(position); }
@Override public long getItemId(int position) { return mAdapter.getItemId(position); } }