ViewPager2

Отображение представлений или фрагментов в формате, допускающем пролистывание.
Последнее обновление Стабильный релиз Предварительная версия релиза Бета-версия Альфа-версия
14 мая 2024 г. 1.1.0 - - -

Зависимости AndroidX

Для использования ViewPager2 добавьте следующую зависимость AndroidX в файл build.gradle вашего проекта:

классный

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.1.0"
}

Котлин

dependencies {
    implementation("androidx.viewpager2:viewpager2:1.1.0")
}

Обратная связь

Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав кнопку со звездочкой.

Создать новую задачу

Для получения более подробной информации см. документацию по системе отслеживания ошибок .

Версия 1.1.0

Версия 1.1.0

14 мая 2024 г.

Выпущена версия androidx.viewpager2:viewpager2:1.1.0 . Версия 1.1.0 содержит следующие коммиты .

Важные изменения с версии 1.0.0

  • Исправлены ошибки, приводившие к сбоям при использовании с RecyclerView 1.3.1-rc01 или более поздними версиями.
  • Теперь ViewPager2 корректно заполняет поля CollectionInfo и CollectionItemInfo , которые RecyclerView 1.2.0-alpha02 и более поздние версии больше не заполняют по умолчанию.
  • Добавлен интерфейс FragmentTransactionCallback для отслеживания изменений жизненного цикла фрагмента, происходящих внутри FragmentStateAdapter .
  • Исправлена ​​проблема FragmentStateAdapter , связанная с начальной видимостью меню фрагмента при добавлении фрагмента в FragmentManager .
  • Fixed dispatch of window insets: all pages now get the same insets. Due to how WindowInsets are dispatched on old API versions (< API 30) that can prevent insets from being available to sibling views, you must opt into this fix via WindowInsetsApplier.install(viewPager2) if you want to apply insets on < API 30 devices.

Версия 1.1.0-rc01

1 мая 2024 г.

Выпущена версия androidx.viewpager2:viewpager2:1.1.0-rc01 без существенных изменений по сравнению с версией 1.1.0-beta02. Версия 1.1.0-rc01 содержит следующие коммиты .

Версия 1.1.0-beta02

24 мая 2023 г.

Выпущена версия androidx.viewpager2:viewpager2:1.1.0-beta02 . Версия 1.1.0-beta02 содержит следующие коммиты.

Изменения в API

  • Добавлены коллбэки для сохранения состояния фрагмента в FragmentTransactionCallback . ( I45b90 )
  • ViewPager2 now no longer tries to fix the broken WindowInsets dispatch of old API versions (< 30), because the fix itself can be harmful to siblings of ViewPager2 . The fix is still available, but has become an opt-in so developers can decide on a case by case basis. Enable the fix by calling WindowInsetsApplier.install(viewPager2)) . ( Ic9a85 )

Исправлены ошибки

  • Исправлены проблемы совместимости с более новыми версиями RecyclerView . Пользователям этой версии ViewPager2 следует обновиться как минимум до RecyclerView 1.3.1-rc01.

Версия 1.1.0-beta01

4 августа 2021 г.

Выпущена версия androidx.viewpager2:viewpager2:1.1.0-beta01 . Версия 1.1.0-beta01 содержит следующие коммиты.

Изменения в API

  • Обновите androidx для использования Kotlin 1.4 ( Id6471 , b/165307851 , b/165300826 )

  • Переход на использование Java 8 для всех библиотек androidx ( 2923f39 )

Исправлены ошибки

  • Исправлена ​​ошибка в отображении отступов окон, теперь все страницы получают одинаковые отступы. ( I47fef )

Версия 1.1.0-alpha01

1 апреля 2020 г.

Выпущена версия androidx.viewpager2:viewpager2:1.1.0-alpha01 . Версия 1.1.0-alpha01 содержит следующие коммиты.

This release accompanies a change in RecyclerView 1.2.0-alpha02 by populating CollectionInfo and CollectionItemInfo that RecyclerView no longer provides by default. When updating to RecyclerView 1.2.0-alpha02 also update ViewPager2 to prevent Accessibility regressions.

Новые функции

  • Добавлен интерфейс FragmentTransactionCallback для отслеживания изменений жизненного цикла фрагмента, происходящих внутри FragmentStateAdapter . ( Ibda77 )

Исправлены ошибки

  • Исправлена ​​проблема FragmentStateAdapter , связанная с начальной видимостью меню фрагмента при добавлении фрагмента в FragmentManager . ( I9d2ff , b/144442240 )

Версия 1.0.0

Версия 1.0.0

20 ноября 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0 без изменений по сравнению с версией 1.0.0-rc01. Версия 1.0.0 содержит следующие коммиты .

Основные особенности версии 1.0.0

  • Улучшения по сравнению с предыдущей реализацией ViewPager :
    • Поддержка компоновки RTL (справа налево).
    • Поддержка вертикальной ориентации
    • Надежная поддержка Fragment (включая обработку изменений в базовой коллекции Fragment ).
    • Анимация изменений в наборе данных (включая поддержку DiffUtil )
  • Простая миграция с предыдущей реализации ViewPager (по возможности, с сохранением API-совместимости). См. руководство по миграции и пример приложения .

См. руководство по использованию ViewPager2 для переключения между фрагментами.

Версия 1.0.0-rc01

23 октября 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-rc01 без изменений по сравнению с 1.0.0-beta05 . Версия 1.0.0-rc01 содержит следующие коммиты .

Версия 1.0.0-beta05

9 октября 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-beta05 . Версия 1.0.0-beta05 содержит следующие коммиты .

Исправлены ошибки

  • Исправлена ​​ошибка, из-за которой requestFocus на странице, находящейся за пределами экрана, вызывал смену страницы. Теперь поведение соответствует исходному ViewPager. ( b/140656866 )
  • Исправлена ​​ошибка, из-за которой focus оставался на странице за пределами экрана после смены страницы. Теперь фокус сбрасывается при смене страницы. ( b/140656866 )
  • Исправлена ​​ошибка в порядке приостановки/возобновления транзакций Fragment при смене страницы (теперь мы всегда приостанавливаем старый основной элемент перед возобновлением нового). ( b/139489059 )
  • Исправлена ​​ошибка в функциях canScrollHorizontally(int) и canScrollVertically(int) — теперь они возвращают значение, указывающее, может ли ViewPager2 прокручиваться в заданном направлении. ( b/141848404 )
  • В SwipeRefreshLayout исправлена ​​ошибка, позволяющая улучшить его работу с ViewPager2.

Версия 1.0.0-beta04

5 сентября 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-beta04 . Список изменений, включенных в эту версию, можно найти здесь .

Исправлены ошибки

  • Исправлена ​​ошибка, связанная с граничным случаем FragmentStateAdapter и стеком возврата Fragment . ( b/139095195 )
  • Исправлена ​​ошибка в EditText , из-за которой определенные настройки атрибутов вызывали скачок прокрутки/страницы при наборе текста/нажатии фокуса. ( b/138044582 , b/139432498 )
  • Исправлена ​​ошибка с экземплярами ItemDecoration , а также найдено обходное решение для позиционирования индикатора перепрокрутки. ( b/139012032 )
  • Для улучшения работы с ViewPager2 был исправлен ряд проблем в других компонентах: RecyclerView , NestedScrollView и Navigation .

Версия 1.0.0-beta03

7 августа 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-beta03 . Список изменений, включенных в эту версию, можно найти здесь .

Исправлены ошибки

  • Исправлена ​​ошибка FragmentStateAdapter , связанная с временным состоянием Fragment . b/134246546
  • Исправлены ошибки в currentItem и scrollState , возникающие при изменении набора данных во время плавной прокрутки (устранены граничные случаи). b/137642608
  • Исправлена ​​ошибка, из-за которой анимации PageTransformer (включая MarginPageTransformer ) конфликтовали с анимациями изменения набора данных. b/134658996
  • Исправлена ​​ошибка, из-за которой анимация плавной прокрутки отображалась в больших наборах данных (ограничение на значения целых чисел float запятой). b/134858960

Версия 1.0.0-beta02

19 июля 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-beta02 . Список изменений, включенных в эту версию, можно найти здесь .

Исправлены ошибки

  • Удалена непреднамеренная зависимость от jacoco, появившаяся в 1.0.0-beta01 . ( b/137782951 )

Версия 1.0.0-beta01

17 июля 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-beta01 . Список изменений, включенных в эту версию, можно найти здесь .

Исправлены ошибки

  • Исправлена ​​ошибка, приводившая к сбою функции ViewPager2.updateCurrentItem при прокрутке и обновлении набора данных.
  • Исправлена ​​ошибка NullPointerException , приводящая к сбою, связанному с ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING теперь является значением наклона сенсорного экрана по умолчанию.
  • Исправлены события OnPageChangeCallback для пустых адаптеров (страница 0 вместо -1 для обеспечения совместимости с ViewPager1 ).

Известные проблемы

Версия 1.0.0-alpha06

2 июля 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-alpha06 . Список изменений, включенных в эту версию, можно найти здесь .

Это наша последняя запланированная альфа-версия перед тем, как заморозить API и перейти к бета-версии — пожалуйста, оставляйте отзывы об API.

Новые функции

  • Основы для повышения доступности: ACTION_PAGE_RIGHT , ACTION_PAGE_DOWN и т. д.

изменения API

  • FragmentStateAdapter : Fragment , не являющиеся основными элементами, ограничены значением STARTED , а их menuVisibility установлено в false.
  • PageTransformer , MarginPageTransformer , CompositePageTransformer : документация по position fixed.

Исправлены ошибки

  • После изменения набора данных / изменения адаптера currentItem исправлено.
  • Исправлена ​​проблема с параметром MarginPageTransformer , связанная с offscreenPageLimit .
  • Исправлена ​​ошибка, возникающая при использовании функции FakeDrag для выполнения действий, связанных с доступом к специальным возможностям.

Версия 1.0.0-alpha05

5 июня 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-alpha05 . Список изменений, включенных в эту версию, можно найти здесь .

Новые функции

  • Представлен ItemDecorator с поведением, аналогичным RecyclerView .
  • MarginPageTransformer была введена для обеспечения возможности создания пространства между страницами (за пределами отступа страницы).
  • CompositePageTransformer была введена для обеспечения возможности объединения нескольких функций PageTransformer .

изменения API

  • Метод FragmentStateAdapter#getItem переименован в FragmentStateAdapter#createFragment — предыдущее название метода в прошлом являлось источником ошибок.
  • Значение OFFSCREEN_PAGE_LIMIT_DEFAULT изменено с 0 на -1 . Нет необходимости вносить изменения в клиентский код, если используется константа OFFSCREEN_PAGE_LIMIT_DEFAULT .

Исправлены ошибки

  • Исправлено поведение функции getCurrentItem() в случае прерывания SCROLL_STATE_SETTLING перетаскиванием в противоположном направлении.
  • Проблемы загрузчика классов FragmentStateAdapter решены в контексте "Не сохранять активности".
  • Документация setOffscreenPageLimit улучшена.

Версия 1.0.0-alpha04

7 мая 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-alpha04 . Список изменений, включенных в эту версию, можно найти здесь .

Новые функции

  • offscreenPageLimit : позволяет жестко контролировать количество View / Fragment страниц, хранящихся в иерархии представлений.

изменения API

  • Атрибуты orientation и isUserScrollable больше не являются частью SavedState
  • Методы saveState и restoreState в FragmentStateAdapter стали финальными.
  • Аннотации ViewPager2.Orientation и ViewPager2.ScrollState сделаны непубличными.

Исправлены ошибки

  • SavedState : исправлена ​​ошибка восстановления при уничтожении/повторном создании Activity .
  • SavedState : отложенное восстановление до тех пор, пока не будет установлен адаптер.
  • OnPageChangeCallback : исправлены незначительные ошибки.

Версия 1.0.0-alpha03

3 апреля 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-alpha03 . Список изменений, включенных в эту версию, можно найти здесь .

Новые функции

  • Возможность программной прокрутки ViewPager2: fakeDragBy(offsetPx) .

изменения API

  • Теперь FragmentStateAdapter требуется объект Lifecycle . Добавлены два вспомогательных конструктора для его получения из хост-объекта FragmentActivity или хост- Fragment .

Исправлены ошибки

  • Многочисленные исправления в поддержке Fragment :
    • Обработка обновлений набора данных в свернутом режиме или во время поворота экрана;
    • удаление ненужных фрагментов после поворота;
    • Удаление сохраненного состояния удаленных элементов.
  • PageChangeCallback : фиксированный расчет смещения страницы для страниц с полями.

Версия 1.0.0-alpha02

13 марта 2019 г.

Выпущена версия androidx.viewpager2:viewpager2:1.0.0-alpha02 . Полный список изменений, включенных в эту версию, можно найти здесь .

Новые функции

  • Возможность отключить ввод данных пользователем ( setUserInputEnabled , isUserInputEnabled )

изменения API

  • Финальный класс ViewPager2

Исправлены ошибки

  • Исправления стабильности FragmentStateAdapter

Версия 1.0.0-alpha01

7 февраля 2019 г.

Выпущена версия androidx.viewpager2:viewpager2 1.0.0-alpha01 . Это первый релиз ViewPager2.

Новые функции

  • По сравнению со своим предшественником android.support.v4.view.ViewPager (VP1):
    • Поддержка компоновки справа налево (RTL).
    • Поддержка вертикальной ориентации
    • notifyDataSetChanged полностью функциональна (исправлены ошибки VP1).

изменения API

  • FragmentStateAdapter заменяет FragmentStatePagerAdapter
  • RecyclerView.Adapter заменяет PagerAdapter
  • registerOnPageChangeCallback заменяет addPageChangeListener

Известные проблемы

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • вложенная прокрутка параллельно ориентации
  • без контроля ограничений за пределами экрана
  • Необходима более эффективная интеграция с TabLayout.
  • Нет параметра pageWidth (принудительное значение 100%/100%)
  • Трансформатор страниц: нет выбора аппаратного/программного слоя; нет обратного порядка отрисовки.
  • сохранять текущий элемент видимым при вставке страницы перед текущей
  • Необходимо доработать навигацию с помощью клавиатуры.
  • В ближайшее время будут внесены улучшения в стабильность и производительность FragmentStateAdapter