/* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * A {@link androidx.recyclerview.widget.RecyclerView RecyclerView} addon library providing * support for item selection. The library provides support for both touch * and mouse driven selection. Developers retain control over the visual representation, * and the policies controlling selection behavior (like which items are eligible * for selection, and how many items can be selected.) * *
* Want to add selection support to your RecyclerView? Here's how you do it: * *
* Determine which selection key type to use, then build your KeyProvider * *
* Developers must decide on the key type used to identify selected items. Support * is provided for three types: {@link android.os.Parcelable Parcelable}, * {@link java.lang.String String}, and {@link java.lang.Long Long}. * *
* See * {@link androidx.recyclerview.selection.SelectionTracker.Builder SelectionTracker.Builder} * for more detailed advice on which key type to use for your selection keys. * *
* Implement {@link androidx.recyclerview.selection.ItemDetailsLookup ItemDetailsLookup} * * *
* This class provides the selection library code necessary access to information about * items associated with {@link android.view.MotionEvent}. This will likely * depend on concrete {@link androidx.recyclerview.widget.RecyclerView.ViewHolder * RecyclerView.ViewHolder} type employed by your application. * *
* Update views used in RecyclerView to reflect selected state * *
* When the user selects an item the library will record that in * {@link androidx.recyclerview.selection.SelectionTracker SelectionTracker} * then notify RecyclerView that the state of the item has changed. This * will ultimately cause the value to be rebound by way of * {@link androidx.recyclerview.widget.RecyclerView.Adapter#onBindViewHolder * RecyclerView.Adapter#onBindViewHolder}. The item must then be updated * to reflect the new selection status. Without this * the user will not *see* that the item has been selected. * *
* Use {@link androidx.appcompat.view.ActionMode ActionMode} when there is a selection * *
* Register a {@link androidx.recyclerview.selection.SelectionTracker.SelectionObserver} * to be notified when selection changes. When a selection is first created, start * {@link androidx.appcompat.view.ActionMode ActionMode} to represent this to the user, * and provide selection specific actions. * *
* Interpreted secondary actions: Drag and Drop, and Item Activation * *
* At the end of the event processing pipeline the library may determine that the user * is attempting to activate an item by tapping it, or is attempting to drag and drop * an item or set of selected items. React to these interpretations by registering a * respective listener. See * {@link androidx.recyclerview.selection.SelectionTracker.Builder SelectionTracker.Builder} * for details. * *
* Assemble everything with * {@link androidx.recyclerview.selection.SelectionTracker.Builder SelectionTracker.Builder} * * *
* Example usage (with {@code Long} selection keys): *
SelectionTracker* *tracker = new SelectionTracker.Builder<>( * "my-selection-id", * recyclerView, * new StableIdKeyProvider(recyclerView), * new MyDetailsLookup(recyclerView), * StorageStrategy.createLongStorage()) * .build(); *
In order to build a SelectionTracker instance the supplied RecyclerView must be initialized * with an Adapter. Given this fact, you will probably need to inject the SelectionTracker * instance into your RecyclerView.Adapter after the Adapter is created, as it will be necessary * to consult selected status using SelectionTracker from the onBindViewHolder method. * *
* Include Selection in Activity lifecycle events * *
* In order to preserve state, the author must include the selection library in the handling * of Activity lifecycle events. See SelectionTracker#onSaveInstanceState and * SelectionTracker#onRestoreInstanceState. * *
A unique selection id must be supplied to * {@link androidx.recyclerview.selection.SelectionTracker.Builder SelectionTracker.Builder} * constructor. This is necessary as an activity or fragment may have multiple distinct * selectable lists that may both need to be persisted in saved state. */ package androidx.recyclerview.selection;