Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

ViewPager2

Latest Update Current Stable Release Next Release Candidate Beta Release Alpha Release
October 9, 2019 - - 1.0.0-beta05 -

AndroidX Dependencies

To use ViewPager2, add the following AndroidX dependency to your project's build.gradle file:

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.0.0-beta05"
}

Version 1.0.0

Version 1.0.0-beta05

October 9, 2019

androidx.viewpager2:viewpager2:1.0.0-beta05 is released. Version 1.0.0-beta05 contains these commits.

Bug fixes

  • Fix for requestFocus on an off-screen page causing a page change. The behaviour is now consistent with the original ViewPager. (b/140656866)
  • Fix for focus remaining on an off-screen page after a page change. Focus is now cleared when changing the page. (b/140656866)
  • Fix for ordering of Fragment pause / resume transactions when changing the page (we now always pause the old primary item before resuming the new one). (b/139489059)
  • Fix for canScrollHorizontally(int) and canScrollVertically(int) - they now return whether ViewPager2 can scroll in the given direction. (b/141848404)
  • An issue in SwipeRefreshLayout was fixed to work better with ViewPager2.

Version 1.0.0-beta04

September 5, 2019

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

Bug fixes

  • Fix for FragmentStateAdapter edge-case issue with Fragment back stack. (b/139095195)
  • Fix for EditText with certain attribute configurations causing a scroll/page jump on typing/focus. (b/138044582, b/139432498)
  • Fix for an issue with ItemDecoration instances, and a workaround for overscroll indicator positioning. (b/139012032)
  • A number of issues were fixed in other components to work better with ViewPager2: RecyclerView, NestedScrollView, and Navigation.

Version 1.0.0-beta03

August 7, 2019

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

Bug fixes

  • Fix for FragmentStateAdapter issue with transient Fragment state. b/134246546
  • Fix for currentItem and scrollState issues when a data-set is changed during a smooth-scroll (edge cases addressed). b/137642608
  • Fix for PageTransformer (including MarginPageTransformer) animations conflicting with data-set change animations. b/134658996
  • Fix for smooth-scroll animations in large datasets (float integer value limit). b/134858960

Version 1.0.0-beta02

July 19, 2019

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

Bug fixes

  • Removed unintentional jacoco dependency that was introduced in 1.0.0-beta01. (b/137782951)

Version 1.0.0-beta01

July 17, 2019

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

Bug fixes

  • Fix for ViewPager2.updateCurrentItem crash while scrolling and updating data-set
  • Fix for NullPointerException crash related to ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING now a default touch slop
  • OnPageChangeCallback events fixed for empty adapters (page 0 instead of -1 for parity with ViewPager1)

Known issues

Version 1.0.0-alpha06

July 2, 2019

androidx.viewpager2:viewpager2:1.0.0-alpha06 is released. The commits included in this version can be found here.

This is our last planned alpha before freezing the API and moving to beta - please provide us with API feedback.

New features

  • Foundations for improved Accessibility: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN, etc.

API changes

  • FragmentStateAdapter: non-primary-item Fragments are capped at STARTED, and their menuVisibility is set to false.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: documentation for positionfixed.

Bug fixes

  • currentItem after data-set change / adapter change fixed.
  • MarginPageTransformer with offscreenPageLimit issue fixed.
  • Accessibility actions while in FakeDrag behaviour fixed.

Version 1.0.0-alpha05

June 5, 2019

androidx.viewpager2:viewpager2:1.0.0-alpha05 is released. The commits included in this version can be found here.

New features

  • ItemDecorator introduced with a behaviour consistent with RecyclerView.
  • MarginPageTransformer introduced to provide an ability to create space between pages (outside of page inset).
  • CompositePageTransformer introduced to provide an ability to combine multiple PageTransformers.

API changes

  • FragmentStateAdapter#getItem method renamed to FragmentStateAdapter#createFragment - previous method name has proven to be a source of bugs in the past.
  • OFFSCREEN_PAGE_LIMIT_DEFAULT value changed from 0 to -1. No need for a client code change if the OFFSCREEN_PAGE_LIMIT_DEFAULTconstant used.

Bug fixes

  • getCurrentItem() behaviour corrected when SCROLL_STATE_SETTLING gets interrupted by a drag in the opposite direction.
  • FragmentStateAdapter class loader issues addressed in the "Don't keep activities" context.
  • setOffscreenPageLimit documentation improved.

Version 1.0.0-alpha04

May 7, 2019

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

New features

  • offscreenPageLimit: allows for a tight control of the number of page Views / Fragments kept in the view hierarchy

API changes

  • orientation and isUserScrollable attributes are no longer part of SavedState
  • saveState and restoreState methods made final in FragmentStateAdapter
  • ViewPager2.Orientation and ViewPager2.ScrollState annotations made non-public

Bug fixes

  • SavedState: fixed an issue with restoring when Activity gets destroyed / recreated
  • SavedState: delayed restoring until the adapter is set
  • OnPageChangeCallback: minor edge cases fixed

Version 1.0.0-alpha03

April 3rd, 2019

androidx.viewpager2:viewpager2:1.0.0-alpha03 is released. The commits included in this version can be found here.

New features

  • Ability to programmatically scroll ViewPager2: fakeDragBy(offsetPx).

API changes

  • FragmentStateAdapter now requires a Lifecycle object. Two utility constructors added to obtain it from the host FragmentActivity or the host Fragment.

Bug fixes

  • Numerous Fragment support fixes:
    • handling dataset updates while minimised, or during a screen rotation;
    • removing irrelevant Fragments after rotation;
    • removing saved state of removed items.
  • PageChangeCallback: fixed page offset calculation for pages with margins.

Version 1.0.0-alpha02

March 13, 2019

androidx.viewpager2:viewpager2:1.0.0-alpha02 is released. The full list of commits included in this version can be found here.

New features

  • Ability to disable user input (setUserInputEnabled, isUserInputEnabled)

API changes

  • ViewPager2 class final

Bug fixes

  • FragmentStateAdapter stability fixes

Version 1.0.0-alpha01

February 7, 2019

androidx.viewpager2:viewpager2 1.0.0-alpha01 is released. This is the first release of ViewPager2.

New features

  • Comparing to its predecessor android.support.v4.view.ViewPager (VP1):
    • Right-to-left (RTL) layout support
    • Vertical orientation support
    • notifyDataSetChanged fully functional (VP1 bugs addressed)

API changes

  • FragmentStateAdapter replaces FragmentStatePagerAdapter
  • RecyclerView.Adapter replaces PagerAdapter
  • registerOnPageChangeCallback replaces addPageChangeListener

Known issues

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • nested scrolling parallel to orientation
  • no offscreen limit control
  • needs better TabLayout integration
  • no pageWidth setter (forced 100%/100%)
  • page transformer: no hardware/software layer choice; no reverse drawing order
  • keep current item visible when inserting a page before current
  • keyboard navigation needs work
  • FragmentStateAdapter stability / performance improvements coming