public abstract class SelectionTracker
extends Object

   ↳ androidx.recyclerview.selection.SelectionTracker<K>

SelectionTracker provides support for managing a selection of items in a RecyclerView instance.

This class provides support for managing a "primary" set of selected items, in addition to a "provisional" set of selected items using conventional Collections-like methods.

Create an instance of SelectionTracker using SelectionTracker.Builder.

Inspecting the current selection

The underlying selection is described by the Selection class.

A live view of the current selection can be obtained using getSelection(). Changes made to the selection using SelectionTracker will be immediately reflected in this instance.

To obtain a stable snapshot of the selection use copySelection(MutableSelection).

Selection state for an individual item can be obtained using isSelected(Object).

Provisional Selection

Provisional selection exists to address issues where a transitory selection might momentarily intersect with a previously established selection resulting in a some or all of the established selection being erased. Such situations may arise when band selection is being performed in "additive" mode (e.g. SHIFT or CTRL is pressed on the keyboard prior to mouse down), or when there's an active gesture selection (which can be initiated by long pressing an unselected item while there is an existing selection).

A provisional selection can be abandoned, or merged into the primary selection.

Enforcing selection policies

Which items can be selected by the user is a matter of policy in an Application. Developers supply these policies by way of SelectionTracker.SelectionPredicate.


Nested classes

class SelectionTracker.Builder<K>

Builder is the primary mechanism for create a SelectionTracker that can be used with your RecyclerView. 

class SelectionTracker.SelectionObserver<K>

Observer class providing access to information about Selection state changes. 

class SelectionTracker.SelectionPredicate<K>

Implement SelectionPredicate to control when items can be selected or unselected. 



This value is included in the payload when SelectionTracker notifies RecyclerView of changes to selection.

Public constructors


Public methods

abstract void addObserver(SelectionObserver<K> observer)

Adds observer to be notified when changes to selection occur.

abstract boolean clearSelection()

Clears both primary and provisional selections.

abstract void copySelection(MutableSelection<K> dest)

Updates dest to reflect the current selection.

abstract boolean deselect(K key)

Attempts to deselect an item.

abstract Selection<K>