Google is committed to advancing racial equity for Black communities. See how.

Recyclerview

Display large sets of data in your UI while minimizing memory usage.

This table lists all the artifacts in the androidx.recyclerview group.

Artifact Current Stable Release Next Release Candidate Beta Release Alpha Release
recyclerview 1.1.0 - - 1.2.0-alpha06
recyclerview-selection 1.0.0 1.1.0-rc03 - -
This library was last updated on: October 1, 2020

Declaring dependencies

To add a dependency on RecyclerView, you must add the Google Maven repository to your project. Read Google's Maven repository for more information.

Add the dependencies for the artifacts you need in the build.gradle file for your app or module:

dependencies {
    implementation "androidx.recyclerview:recyclerview:1.1.0"
    // For control over item selection of both touch and mouse driven selection
    implementation "androidx.recyclerview:recyclerview-selection:1.1.0-rc03"
}

For more information about dependencies, see Add build dependencies.

Feedback

Your feedback helps make Jetpack better. Let us know if you discover new issues or have ideas for improving this library. Please take a look at the existing issues in this library before you create a new one. You can add your vote to an existing issue by clicking the star button.

Create a new issue

See the Issue Tracker documentation for more information.

Version 1.2.0

Version 1.2.0-alpha06

October 1, 2020

androidx.recyclerview:recyclerview:1.2.0-alpha06 is released. Version 1.2.0-alpha06 contains these commits.

New Features

API Changes

  • Deprecated RecyclerView.setRecyclerListener(RecyclerListener). (I70ad8, b/145767095)

Version 1.2.0-alpha05

July 22, 2020

androidx.recyclerview:recyclerview:1.2.0-alpha05 is released. Version 1.2.0-alpha05 contains these commits.

Bug Fixes

  • Fixed issue where if an RecyclerView only has one item and it is focused, focusing forward or backwards will not move focus. (6f36b3)
  • Fixed an ArrayIndexOutOfBoundsException in StaggeredGridLayoutManager (49b601, b/122303625, b/74877618, b/160193663, b/37086625)
  • Fixed a measurement bug where under specific circumstances, RecyclerView would inappropriately end up not showing it’s children. (89040c, b/138734786)

External Contributions

  • Thanks to Kolin Krewinkel on behalf of Facebook for the contribution!

Version 1.2.0-alpha04

June 24, 2020

androidx.recyclerview:recyclerview:1.2.0-alpha04 is released. Version 1.2.0-alpha04 contains these commits.

API Changes

  • MergeAdapter has been renamed to ConcatAdapter to avoid any confusion with different data merging behaviors (c0540c, b/158019211).

Bug Fixes

  • Improvements to automatic scrolling when all visible items are removed (fe8670, b/154124815)

Version 1.2.0-alpha03

April 29, 2020

androidx.recyclerview:recyclerview:1.2.0-alpha03 is released. Version 1.2.0-alpha03 contains these commits.

New Features

  • RecyclerView now has a nestedScrollBy method that allows programmatic scrolling that cooperates with nested scrolling: (Ibaa58)

Version 1.2.0-alpha02

April 1, 2020

androidx.recyclerview:recyclerview:1.2.0-alpha02 is released. Version 1.2.0-alpha02 contains these commits.

This and higher versions of RecyclerView are not compatible with lower versions of ViewPager2. If you are currently using androidx.viewpager2:viewpager2:1.0.0 or lower, make sure to update to androidx.viewpager2:viewpager2:1.1.0-alpha01.

New Features

  • MergeAdapter

    • MergeAdapter: A new RecyclerView Adapter that can combine multiple adapters linearly.
    MyAdapter adapter1 = ...;
    AnotherAdapter adapter2 = ...;
    MergeAdapter merged = new MergeAdapter(adapter1, adapter2);
    recyclerView.setAdapter(mergedAdapter);
    

    For the sample above, MergeAdapter will present items from adapter1 followed by adapter2.

  • RecyclerView.Adapter lazy state restoration:

    • Added a new API to the RecyclerView.Adapter class which allows Adapter to control when the layout state should be restored.

    • For example, you can call:

    myAdapter.setStateRestorationStrategy(StateRestorationStrategy.WHEN_NOT_EMPTY);
    

    to make RecyclerView wait until Adapter is not empty before restoring the scroll position.

  • CollectionInfo and CollectionItemInfo will no longer be populated by default.

    • If you would like Accessibility Services (Talkback for example) to continue indicating count and item index to the user, you will need to populate CollectionInfo and CollectionItemInfo yourself.

    • These objects are no longer populated in the framework because the framework can’t determine the count of items as perceived by the user (such as separators, headers, or RecyclerView items that represent multiple perceived items).

Bug Fixes

  • RecyclerView now avoids anchoring on Views outside the viewport when the viewport size has changed
  • Fixed a bug in DiffUtil where it might compute the diff wrong when an original item in the first list is duplicated multiple times in the second list. (b/123376278)

Version 1.2.0-alpha01

December 18, 2019

androidx.recyclerview:recyclerview:1.2.0-alpha01 is released. Version 1.2.0-alpha01 contains these commits.

Bug fixes

  • Fixed minor issues with FastScroller related to RTL drawing and touch accuracy (b/143789932, aosp/1130438)
  • Fixed crash in ItemTouchHelper when removed from RecyclerView while ItemTouchHelper animations are running (b/140447176, aosp/1167575)

Version 1.1.0

Version 1.1.0

November 20, 2019

androidx.recyclerview:recyclerview:1.1.0 is released. Version 1.1.0 contains these commits.

Important changes since 1.0.0

  • PagerSnapHelper and LinearSnapHelper now take padding of RecyclerView into account regardless of the value of clipToPadding (b/139452422, b/139012032, aosp/1103182, aosp/1106715, aosp/1130728)
  • RecyclerView.setLayoutTransition(LayoutTransition) is formally deprecated and will throw an IllegalArgumentException when called with a non null value. Use RecyclerView.setItemAnimator(ItemAnimator) instead. (aosp/839414)
  • aosp/723649: RecyclerView now implements NestedScrollingChild3, enabling it to be informed of when all its nested scrolling parents have stopped consuming nested scrolling distances. If developer code currently overrides RecyclerView.onNestedScroll(View, int, int, int, int, int), it will likely no longer be called and RecyclerView.onNestedScroll(View, int, int, int, int, int, int[]) should be overridden instead.
  • RecyclerView now has a default style attribute: recyclerViewStyle, which allows setting of the default style in your theme
  • ViewCompat accessibility actions API no longer breaks RecyclerView ItemDelegate.
  • LinearLayoutManager.calculateExtraLayoutSpace(RecyclerView.State, int[]) can be overridden to customize how much extra layout space should be added to either side of the associated RecyclerView. (aosp/931259)
  • Added a new overload of smoothScrollBy: RecyclerView#smoothScrollBy(@Px int, @Px int, @Nullable Interpolator, int duration), that allows you to specify a duration in milliseconds for how long the animation should take. (aosp/952807)

Version 1.1.0-rc01

October 23, 2019

androidx.recyclerview:recyclerview:1.1.0-rc01 is released. Version 1.1.0-rc01 contains these commits.

Bug fixes

  • Fixed an "Application Not Responding" when overriding RecyclerViewAccessibilityDelegate.ItemDelegate (aosp/1138057, aosp/1133434)

Version 1.1.0-beta05

October 9, 2019

androidx.recyclerview:recyclerview:1.1.0-beta05 is released. Version 1.1.0-beta05 contains these commits.

API changes

  • Following up on aosp/1106715 and aosp/1103182, now LinearSnapHelper and PagerSnapHelper will return the view that is in the center of the RecyclerView’s bounds, minus padding, despite the value of clipToPadding. (aosp/1130728)

Bug fixes

  • Fixed an issue where RecyclerView was generating duplicate accessibility nodes for children of RecyclerView. (aosp/1130618)
  • Fixed an issue where Virtual Accessibility Hierarchies in RecyclerViews didn't work.
  • Fixed an issue where custom ItemDelegates weren’t used.

Version 1.1.0-beta04

September 5, 2019

androidx.recyclerview:recyclerview:1.1.0-beta04 is released. The commits included in this version can be found here.

Bug fixes

  • PagerSnapHelper and LinearSnapHelper now take padding of RecyclerView into account regardless of the value of clipToPadding (b/139452422, b/139012032, aosp/1103182, aosp/1106715)
  • Fixed a bug where RecyclerView was not disallowing touch intercept when nested pre-scrolling caused a NestedScrollingParent to scroll (b/138668210, aosp/1105373). This benefits libraries such as ViewPager2.
  • RecyclerView now consistently goes to SCROLL_STATE_DRAGGING before nested pre scrolls are dispatched (aosp/1105373)
  • Nested pre-scrolling is no longer performed before the gesture exceeds touch slop (b/139530818, aosp/1105373)
  • dx and dy arguments dispatched to nested pre-scrolls are zeroed when RecyclerView can’t scroll in that direction (aosp/1105373)

Version 1.1.0-beta03

August 15, 2019

androidx.recyclerview:recyclerview:1.1.0-beta03 is released. The commits included in this version can be found here.

API changes

  • RecyclerView now dispatches scroll distances via View.onScrollChanged(int l, int t, int oldl, int oldt) such that accessibility services are notified about scroll changes accurately. (aosp/1007823)

Bug fixes

  • Fixed a major bug stack overflow bug related to RecyclerView and accessibility. (aosp/1099577)

Version 1.1.0-beta02

August 7, 2019

androidx.recyclerview:recyclerview:1.1.0-beta02 is released. The commits included in this version can be found here.

New features

  • RecyclerView now has a default style attribute: recyclerViewStyle, which allows setting of the default style in your theme

Bug fixes

  • Fixed a bug where RecyclerView was not disallowing touch intercept when scrolling it caused a NestedScrollingParent to scroll. (b/131115697, aosp/1055911)

Version 1.1.0-beta01

July 2, 2019

androidx.recyclerview:recyclerview:1.1.0-beta01 is released. The commits included in this version can be found here.

New features

  • RecyclerView now participates in nested scrolling when a scroll is initiated via accessibility events. (aosp/973584)

Version 1.1.0-alpha06

June 5, 2019

androidx.recyclerview:recyclerview:1.1.0-alpha06 and androidx.recyclerview:recyclerview-selection:1.1.0-alpha06 are released. The commits included in this version can be found here.

New features

  • Added a new overload of smoothScrollBy: RecyclerView#smoothScrollBy(@Px int, @Px int, @Nullable Interpolator, int duration), that allows you to specify a duration in milliseconds for how long the animation should take. (aosp/952807)

API changes

  • GridLayoutManager and StaggeredGridLayoutManager no longer automatically label full span items as headers for accessibility purposes (aosp/969703)
  • Preserve order of selection (by creation time) in recyclerview-selection (aosp/937279)

Bug fixes

  • Fixed a bug where RecyclerView was flinging with incorrect velocities while in a nested scrolling situation. (aosp/961642)
  • Added stability improvements to recyclerview-selection (aosp/960213, aosp/926296)

Version 1.1.0-alpha05

May 7, 2019

androidx.recyclerview:recyclerview:1.1.0-alpha05 and androidx.recyclerview:recyclerview-selection:1.1.0-alpha05 are released. The commits included in this version can be found here.

New features

  • LinearLayoutManager.calculateExtraLayoutSpace(RecyclerView.State, int[]) can be overridden to customize how much extra layout space should be added to either side of the associated RecyclerView. (aosp/931259)

API changes

  • Add API to retrieve DividerItemDecoration drawable (aosp/937282)
  • Deprecate LinearLayout.getExtraLayoutSpace(RecyclerVew.State) in favor of a new mechanism that allows to have custom extra layout space on both sides. The new method is LinearLayout.calculateExtraLayoutSpace(RecyclerView.state, int[]) (aosp/931259)

Bug fixes

Version 1.1.0-alpha04

April 3rd, 2019

androidx.recyclerview:recyclerview:1.1.0-alpha04 is released. The commits included in this version can be found here.

Bug fixes

  • RV OnItemTouchListener's previously couldn’t intercept on ACTION_UP, preventing OnItemTouchListener’s from blocking other code from responding to ACTION_UP. This is now fixed: (aosp/916137)

Version 1.1.0-alpha03

March 13th, 2019

androidx.recyclerview:recyclerview:1.1.0-alpha03 is released. The full list of commits included in this version can be found here.

New features

  • GridLayoutManager: Opt in, higher resolution GridLayoutManager scroll bar dimension estimation (aosp/838836):
    • Uses span information to estimate scroll bar dimensions for a GridLayoutManager.
    • To enable, call GridLayoutManager#setUsingSpansToEstimateScrollbarDimensions(boolean) passing in true.
    • See the documentation on GridLayoutManager#setUsingSpansToEstimateScrollbarDimensions(boolean) for more information.

Bug fixes

  • Accessibility: There was a bug where once a ViewHolder was recycled and then rebound, the ItemDelegate associated with the RecyclerView’s RecyclerViewAccessibilityDelegate was not being associated with the ViewHolder’s itemView, breaking Accessibility. This is now fixed (aosp/917740).

Version 1.1.0-alpha02

January 30, 2019

androidx.recyclerview:recyclerview 1.1.0-alpha02 is released.

API changes

  • RecyclerView.setLayoutFrozen(boolean) and RecyclerView.isLayoutFrozen() are deprecated in favor of RecyclerView.suppressLayout(boolean) and RecyclerView.isLayoutSuppressed(). (aosp/839414)
  • RecyclerView.setLayoutTransition(LayoutTransition) is formally deprecated and will throw an IllegalArgumentException when called with a non null value. (aosp/839414)

Bug fixes

  • Fix bug in RV where SmoothScroller is never stopped (aosp/843741)
  • Bug fixed where SCROLL_STATE_IDLE may not be called at the end of a scrolling animation. (aosp/812576)

Version 1.1.0-alpha01

December 3, 2018

androidx.recyclerview 1.1.0-alpha01 and androidx.recyclerview-selection 1.1.0-alpha01 are released.

androidx.recyclerview 1.1.0-alpha01

API changes

  • aosp/723649: RecyclerView now implements NestedScrollingChild3, enabling it to be informed of when all its nested scrolling parents have stopped consuming nested scrolling distances. If developer code currently overrides RecyclerView.onNestedScroll(View, int, int, int, int, int), it will likely no longer be called and RecyclerView.onNestedScroll(View, int, int, int, int, int, int[]) should be overridden instead.

Bug fixes

  • Fixed crash when using TransitionManager to collapse/expand item in RecyclerView (b/37129527).
  • Fixed bug where RecyclerView.OnItemTouchListener’s behavior was inconsistent with the view system’s onInterceptTouchEvent and onTouchEvent behavior (aosp/721235)
  • Fixed few edge case bugs related to smooth scrolling (aosp/729718, aosp/747168, aosp/812576)
  • Fixed snap strategy in PagerSnapHelper to deal with non-typical child views (aosp/795752)

androidx.recyclerview-selection 1.1.0-alpha01

Bug fixes

  • Fixed ConcurrentModificationException when data set changed with removing selection.

RecyclerView-Selection Version 1.1.0

RecyclerView-Selection Version 1.1.0-rc03

October 1, 2020

androidx.recyclerview:recyclerview-selection:1.1.0-rc03 is released. Version 1.1.0-rc03 contains these commits.

Bug Fixes

Thanks to Stefan Kiesler for testing fixes and feedback.

  • Fixed issue where child view OnClickListeners were called unexpectedly during active selection.
  • Mouse handler (band-selection) > Handle unexpected scrolls gracefully. (b/167821507)

RecyclerView-Selection Version 1.1.0-rc02

September 2, 2020

androidx.recyclerview:recyclerview-selection:1.1.0-rc02 is released. Version 1.1.0-rc02 contains these commits.

Highlights

  • Addressed several regressions from 1.0 in input handling.
  • Updated library to honor onRequestDisallowInterceptTouchEvent, allowing it to play well with ItemTouchHelper (just swipe it away!).

Bug Fixes

  • Fixed issue where the selection library misinterpreted GestureDetector events resulting in lost taps during active selection (b/165030422)
  • Fixed issue where selection was not updated to reflect items removed from adapter. (b/138932671)
  • Fixed issue where RecyclerView items would fire onClick events while SelectionTracker has active selection (b/161162268)
  • Now handles onRequestDisallowInterceptTouchEvent correctly
  • Fixed issue where ”Cannot call this method in a scroll callback” seen during mouse scrolling on Q
  • Updated docs (especially in StableIdKeyProvider) to clearly state requirements of RecyclerView instance

Recyclerview-Selection Version 1.1.0-rc01

February 5, 2020

androidx.recyclerview:recyclerview-selection:1.1.0-rc01 is released. Version 1.1.0-rc01 contains these commits.

Bug fixes

  • Fixed an issue where RecyclerView is hard to scroll with a gesture selection if it interacts with a scrollable AppBarLayout (aosp/1193934)

RecyclerView-Selection Version 1.1.0-beta01

December 4, 2019

androidx.recyclerview:recyclerview-selection:1.1.0-beta01 is released. Version 1.1.0-beta01 contains these commits.

General improvements in stability related to defensive checks and management of internal state.

Bug fixes

API changes

  • Added selection key type parameter to classes and methods where missing.
  • Deprecated methods:
    • SelectionTracker.Builder#withPointerTooltype
    • SelectionTracker.Builder#withGestureTooltype
    • These methods existed with the intent that developers might map pointer or gesture behaviors to tooltypes other than the defaults*. The intent was good, but upon further use it became clear that user expectations around input behavior are very tooltype specific. Also, "passive" styli are FINGER tooltype as far as the Android input system is concerned.
    • Default tooltypes are FINGER for Gesture and MOUSE for Pointer.