SelectionTracker.Builder


public final class SelectionTracker.Builder

Builder is the primary mechanism for create a SelectionTracker that can be used with your RecyclerView. Once installed, users will be able to create and manipulate selection using a variety of intuitive techniques like tap, gesture, and mouse lasso.

Example usage:

SelectionTrackertracker = new SelectionTracker.Builder<>(
       "my-uri-selection",
       recyclerView,
       new DemoStableIdProvider(recyclerView.getAdapter()),
       new MyDetailsLookup(recyclerView),
       StorageStrategy.createParcelableStorage(Uri.class))
       .build();

Restricting which items can be selected and limiting selection size

SelectionPredicate provides a mechanism to restrict which Items can be selected, to limit the number of items that can be selected, as well as allowing the selection code to be placed into "single select" mode, which as the name indicates, constrains the selection size to a single item.

Configuring the tracker for single single selection support can be done by supplying createSelectSingleAnything. SelectionTrackertracker = new SelectionTracker.Builder<>( "my-string-selection", recyclerView, new DemoStableIdProvider(recyclerView.getAdapter()), new MyDetailsLookup(recyclerView), StorageStrategy.createStringStorage()) .withSelectionPredicate(SelectionPredicates#createSelectSingleAnything()) .build();

Retaining state across Android lifecycle events

Support for storage/persistence of selection must be configured and invoked manually owing to its reliance on Activity lifecycle events. Failure to include support for selection storage will result in the active selection being lost when the Activity receives a configuration change (e.g. rotation) or when the application process is destroyed by the OS to reclaim resources.

Key Type

Developers must decide on the key type used to identify selected items. Support is provided for three types: Parcelable, String, and Long.

Parcelable: Any Parcelable type can be used as the selection key. This is especially useful in conjunction with android.net.Uri as the Android URI implementation is both parcelable and makes for a natural stable selection key for values represented by the Android Content Provider framework. If items in your view are associated with stable content:// uris, you should use Uri for your key type.

String: Use String when a string based stable identifier is available.

Long: Use Long when RecyclerView's long stable ids are already in use. It comes with some limitations, however, as access to stable ids at runtime is limited. Band selection support is not available when using the default long key storage implementation. See StableIdKeyProvider for details.

Usage:

     private SelectionTrackermTracker; 
     
     public void onCreate(Bundle savedInstanceState) { 
     // See above for details on constructing a SelectionTracker instance. 
     
     if (savedInstanceState != null) { 
     mTracker.onRestoreInstanceState(savedInstanceState); 
      } 
      } 
     
     protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     mTracker.onSaveInstanceState(outState); 
      }
Parameters

Selection key type. Built in support is provided for String, Long, and Parcelable. StorageStrategy provides factory methods for each type: createStringStorage, createParcelableStorage, createLongStorage

Summary

Public constructors

Builder(
    @NonNull String selectionId,
    @NonNull RecyclerView recyclerView,
    @NonNull ItemKeyProvider keyProvider,
    @NonNull ItemDetailsLookup detailsLookup,
    @NonNull StorageStrategy storage
)

Creates a new SelectionTracker.Builder useful for configuring and creating a new SelectionTracker for use with your RecyclerView.

Public methods

@NonNull SelectionTracker

Prepares and returns a SelectionTracker.

@NonNull SelectionTracker.Builder
withBandOverlay(@DrawableRes int bandOverlayId)

Replaces default band overlay.

@NonNull SelectionTracker.Builder

Replaces default band predicate.

@NonNull SelectionTracker.Builder

Add focus delegate to interact with selection related focus changes.

@NonNull SelectionTracker.Builder
withGestureTooltypes(@NonNull int[] toolTypes)

This method is deprecated.

GestureSelection is best bound to TOOL_TYPE_FINGER, and only that tool type.

@NonNull SelectionTracker.Builder

Adds a context click listener.

@NonNull SelectionTracker.Builder

Adds a drag initiated listener.

@NonNull SelectionTracker.Builder

Adds an item activation listener.

@NonNull SelectionTracker.Builder

Add operation monitor allowing access to information about active operations (like band selection and gesture selection).

@NonNull SelectionTracker.Builder
withPointerTooltypes(@NonNull int[] toolTypes)

This method is deprecated.

PointerSelection is best bound to TOOL_TYPE_MOUSE, and only that tool type.

@NonNull SelectionTracker.Builder

Install selection predicate.

Public constructors

Builder

Added in 1.0.0
public Builder(
    @NonNull String selectionId,
    @NonNull RecyclerView recyclerView,
    @NonNull ItemKeyProvider keyProvider,
    @NonNull ItemDetailsLookup detailsLookup,
    @NonNull StorageStrategy storage
)

Creates a new SelectionTracker.Builder useful for configuring and creating a new SelectionTracker for use with your RecyclerView.

Parameters
@NonNull String selectionId

A unique string identifying this selection in the context of the activity or fragment.

@NonNull RecyclerView recyclerView

the owning RecyclerView

@NonNull ItemKeyProvider keyProvider

the source of selection keys

@NonNull ItemDetailsLookup detailsLookup

the source of information about RecyclerView items.

@NonNull StorageStrategy storage

Strategy for type-safe storage of selection state in Bundle.

Public methods

build

Added in 1.0.0
public @NonNull SelectionTracker build()

Prepares and returns a SelectionTracker.

Returns
@NonNull SelectionTracker

this

withBandOverlay

Added in 1.0.0
public @NonNull SelectionTracker.Builder withBandOverlay(@DrawableRes int bandOverlayId)

Replaces default band overlay.

withBandPredicate

Added in 1.0.0
public @NonNull SelectionTracker.Builder withBandPredicate(@NonNull BandPredicate bandPredicate)

Replaces default band predicate.

withFocusDelegate

Added in 1.0.0
public @NonNull SelectionTracker.Builder withFocusDelegate(@NonNull FocusDelegate delegate)

Add focus delegate to interact with selection related focus changes.

Parameters
@NonNull FocusDelegate delegate

the delegate to be used

withGestureTooltypes

public @NonNull SelectionTracker.Builder withGestureTooltypes(@NonNull int[] toolTypes)

Replaces default tap and gesture tool-types. Defaults are: TOOL_TYPE_FINGER.

Parameters
@NonNull int[] toolTypes

the tool types to be used

withOnContextClickListener

Added in 1.0.0
public @NonNull SelectionTracker.Builder withOnContextClickListener(@NonNull OnContextClickListener listener)

Adds a context click listener. Respond to right-click.

Parameters
@NonNull OnContextClickListener listener

the listener to be used

withOnDragInitiatedListener

Added in 1.0.0
public @NonNull SelectionTracker.Builder withOnDragInitiatedListener(@NonNull OnDragInitiatedListener listener)

Adds a drag initiated listener. Add support for drag and drop.

Parameters
@NonNull OnDragInitiatedListener listener

the listener to be used

withOnItemActivatedListener

Added in 1.0.0
public @NonNull SelectionTracker.Builder withOnItemActivatedListener(
    @NonNull OnItemActivatedListener listener
)

Adds an item activation listener. Respond to taps/enter/double-click on items.

Parameters
@NonNull OnItemActivatedListener listener

the listener to be used

withOperationMonitor

Added in 1.0.0
public @NonNull SelectionTracker.Builder withOperationMonitor(@NonNull OperationMonitor monitor)

Add operation monitor allowing access to information about active operations (like band selection and gesture selection).

Parameters
@NonNull OperationMonitor monitor

the monitor to be used

withPointerTooltypes

public @NonNull SelectionTracker.Builder withPointerTooltypes(@NonNull int[] toolTypes)

Replaces default pointer tool-types. Pointer tools are associated with band selection, and certain drag and drop behaviors. Defaults are: TOOL_TYPE_MOUSE.

Parameters
@NonNull int[] toolTypes

the tool types to be used

withSelectionPredicate

Added in 1.0.0
public @NonNull SelectionTracker.Builder withSelectionPredicate(
    @NonNull SelectionTracker.SelectionPredicate predicate
)

Install selection predicate.

Parameters
@NonNull SelectionTracker.SelectionPredicate predicate

the predicate to be used.