Customize a dynamic list Part of Android Jetpack.
You can customize
objects to meet your specific needs. The standard classes described in
Create dynamic lists with
RecyclerView provide all the functionality that most developers need. In
many cases, you only need to design the view for each view holder and write the
code to update those views with the appropriate data. However, if your app has
specific requirements, you can modify the standard behavior in a number of ways.
This document describes some of the possible customizations.
Modify the layout
RecyclerView uses a layout manager to position the individual
items on the screen and to determine when to reuse item views that are no longer
visible to the user. To reuse—or recycle—a view, a layout
manager might ask the adapter to replace the contents of the view with a
different element from the dataset. Recycling views this way improves
performance by avoiding the creation of unnecessary views or performing
lookups. The Android Support Library includes three standard layout managers,
ach of which offers many customization options:
LinearLayoutManager: arranges the items in a one-dimensional list. Using a
LinearLayoutManagerprovides functionality like a
GridLayoutManager: arranges the items in a two-dimensional grid, like the squares on a checkerboard. Using a
GridLayoutManagerprovides functionality like a
StaggeredGridLayoutManager: arranges the items in a two-dimensional grid, with each column slightly offset from the one before, like the stars on an American flag.
If these layout managers don't suit your needs, you can create your own by
Add item animations
Whenever an item changes,
RecyclerView uses an animator
to change its appearance. This animator is an object that extends the abstract
class. By default, the
to provide the animation. If you want to provide custom animations, you can
define your own animator object by extending
Enable list-item selection
library lets users select items in a
RecyclerView list using touch
or mouse input. This lets you retain control over the visual presentation of a
selected item. You can also retain control over policies controlling selection
behavior, such as which items are eligible for selection and how many items can
To add selection support to a
RecyclerView instance, follow
- Determine which selection key type to use, then build an
There are three key types you can use to identify selected items:
For detailed information about selection-key types, see
- Update item
Viewobjects in the
RecyclerViewto reflect whether the user selects or unselects them.
The selection library doesn't provide a default visual decoration for the selected items. Provide this when you implement
onBindViewHolder(). We recommend the following approach:
ActionModeto provide the user with tools to perform an action on the selection.
- Perform any interpreted secondary actions.
- Assemble everything with
- Include selection in the activity lifecycle events.
ItemDetailsLookup lets the selection library access
RecyclerView items given a
It is effectively a factory for
instances that are backed up by, or extracted from, a
to be notified when a selection changes. When a selection is first created,
ActionMode to present this to the user and provide
selection-specific actions. For example, you can add a delete button to the
ActionMode bar and connect the back arrow on the bar to clear
the selection. When the selection becomes empty—if the user clears the
selection the last time—terminate action mode.
At the end of the event processing pipeline, the library might determine
that the user is attempting to activate an item, by tapping it, or is
attempting to drag an item or set of selected items. React to these
interpretations by registering the appropriate listener. For more
The following example shows how to put these pieces together:
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
To build a
instance, your app must supply the same
that you use to initialize
SelectionTracker.Builder. For this reason, after you create the
SelectionTracker instance, inject it into your
RecyclerView.Adapter. Otherwise, you can't check an item's
selected status from the
To preserve selection state across the activity lifecycle events, your app
must call the selection tracker's
methods from the activity's
methods, respectively. Your app must also supply a unique selection ID to the
SelectionTracker.Builder constructor. This ID is required because
an activity or a fragment might have more than one distinct, selectable list,
all of which need to be persisted in their saved state.
See the following references for additional information.
demo app, which uses
- Use RecyclerView to display a scrollable list codelab.
- Android Kotlin Fundamentals: RecyclerView fundamentals codelab.