ViewPager2

Muestra objetos de Views o Fragments en formato deslizable.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
14 de mayo de 2024 1.1.0 - - -

Dependencias de AndroidX

Para usar ViewPager2, agrega la siguiente dependencia de AndroidX al archivo build.gradle de tu proyecto:

Groovy

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

Kotlin

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

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 1.1.0

Versión 1.1.0

14 de mayo de 2024

Lanzamiento de androidx.viewpager2:viewpager2:1.1.0. La versión 1.1.0 contiene estas confirmaciones.

Cambios importantes desde 1.0.0

  • Se corrigieron las fallas que se producían cuando se usaba con RecyclerView 1.3.1-rc01 o versiones posteriores.
  • ViewPager2 ahora propaga correctamente el CollectionInfo y el CollectionItemInfo que RecyclerView 1.2.0-alpha02 y las versiones posteriores ya no propagan de forma predeterminada.
  • Se agregó la interfaz de FragmentTransactionCallback para escuchar los cambios del ciclo de vida de los fragmentos que ocurren dentro de FragmentStateAdapter
  • Se solucionó el problema de FragmentStateAdapter con la visibilidad del menú de un fragmento inicial cuando se agregaba un fragmento a FragmentManager
  • Se corrigió el despacho de las inserciones de ventana: todas las páginas ahora tienen las mismas inserciones. Debido a la forma en que se despachan WindowInsets en versiones anteriores de la API (< API 30) que pueden evitar que las inserciones estén disponibles para vistas del mismo nivel, debes habilitar esta corrección a través de WindowInsetsApplier.install(viewPager2) si deseas aplicar inserciones en dispositivos con un nivel de API inferior a 30.

Versión 1.1.0-rc01

1 de mayo de 2024

Lanzamiento de androidx.viewpager2:viewpager2:1.1.0-rc01 sin cambios notables desde la versión 1.1.0-beta02. La versión 1.1.0-rc01 contiene estas confirmaciones.

Versión 1.1.0-beta02

24 de mayo de 2023

Lanzamiento de androidx.viewpager2:viewpager2:1.1.0-beta02. La versión 1.1.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron a FragmentTransactionCallback devoluciones de llamada que guardan el estado del fragmento. (I45b90)
  • ViewPager2 ya no intenta corregir el envío de WindowInsets dañado de versiones anteriores de la API (< 30), porque la corrección en sí puede ser dañina para los hermanos de ViewPager2. La corrección aún está disponible, pero se convirtió en una opción para que los desarrolladores puedan decidir caso por caso. Para habilitar la corrección, llama a WindowInsetsApplier.install(viewPager2)). (Ic9a85).

Correcciones de errores

  • Se solucionaron problemas de compatibilidad con versiones más recientes de RecyclerView. Los usuarios de esta versión de ViewPager2 deben actualizar al menos a RecyclerView 1.3.1-rc01.

Versión 1.1.0-beta01

4 de agosto de 2021

Lanzamiento de androidx.viewpager2:viewpager2:1.1.0-beta01. La versión 1.1.0-beta01 contiene estas confirmaciones.

Cambios en la API

Correcciones de errores

  • Se corrigió el despacho de las inserciones de ventana, y todas las páginas ahora tienen las mismas inserciones. (I47fef)

Versión 1.1.0-alpha01

1 de abril de 2020

Lanzamiento de androidx.viewpager2:viewpager2:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.

Esta actualización acompaña un cambio en RecyclerView 1.2.0-alpha02 a fin de propagar CollectionInfo y CollectionItemInfo, dado que RecyclerView ya no los proporciona de forma predeterminada. Cuando actualices a RecyclerView 1.2.0-alpha02, actualiza también ViewPager2 para evitar las regresiones de accesibilidad.

Nuevas funciones

  • Se agregó la interfaz de FragmentTransactionCallback para escuchar los cambios del ciclo de vida de los fragmentos que ocurren dentro de FragmentStateAdapter (Ibda77).

Correcciones de errores

  • Se solucionó el problema de FragmentStateAdapter con la visibilidad del menú de un fragmento inicial cuando se agregaba un fragmento a FragmentManager (I9d2ff, b/144442240).

Versión 1.0.0

Versión 1.0.0

20 de noviembre de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0 sin cambios desde la versión 1.0.0-rc01. La versión 1.0.0 contiene estas confirmaciones.

Funciones principales de la versión 1.0.0

  • Mejoras con respecto a la implementación anterior de ViewPager:
    • Compatibilidad con el diseño de derecha a izquierda (RTL)
    • Compatibilidad con orientación vertical
    • Compatibilidad con Fragment confiable (incluido el control de cambios en la colección Fragment subyacente)
    • Animaciones para cambios en conjuntos de datos (incluida la compatibilidad con DiffUtil)
  • Migración sencilla desde la implementación anterior de ViewPager (paridad de API cuando sea posible). Consulta la guía de migración y la app de muestra.

Consulta la guía acerca del uso de ViewPager2 para deslizar entre fragmentos.

Versión 1.0.0-rc01

23 de octubre de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-rc01 sin cambios desde 1.0.0-beta05. La versión 1.0.0-rc01 contiene estas confirmaciones.

Versión 1.0.0-beta05

9 de octubre de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-beta05. La versión 1.0.0-beta05 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error en el que una página fuera de la pantalla en requestFocus provocaba un cambio de página. Ahora, el comportamiento es coherente con la versión ViewPager original (b/140656866).
  • Se corrigió que focus permanecía en una página fuera de la pantalla después de un cambio de página. Ahora el foco se borra cuando se cambia la página (b/140656866).
  • Se corrigió el pedido de transacciones de pausa/reanudación de Fragment cuando se cambia la página (ahora siempre pausamos el elemento principal anterior antes de reanudar el nuevo) (b/139489059).
  • Se corrigió un error en canScrollHorizontally(int) y canScrollVertically(int): ahora muestran si ViewPager2 puede desplazarse en la dirección especificada (b/141848404).
  • Se corrigió un error en SwipeRefreshLayout para que funcione mejor con ViewPager2.

Versión 1.0.0-beta04

5 de septiembre de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-beta04. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se corrigió un error de caso límite de FragmentStateAdapter con la pila de actividades de Fragment (b/139095195).
  • Se corrigió un error de EditText con ciertas configuraciones de atributos que hacían que una página o un desplazamiento saltaran al escribir o enfocar (b/138044582, b/139432498).
  • Se corrigió un error con instancias de ItemDecoration y se agregó una solución alternativa para el posicionamiento del indicador de desplazamiento (b/139012032).
  • Se solucionaron varios problemas en otros componentes para que funcionen mejor con ViewPager2: RecyclerView, NestedScrollView y Navigation.

Versión 1.0.0-beta03

7 de agosto de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-beta03. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se corrigió el problema de FragmentStateAdapter con el estado transitorio de Fragment (b/134246546).
  • Se corrigieron los problemas con currentItem y scrollState cuando se cambia un conjunto de datos durante un desplazamiento suave (casos límite) (b/137642608).
  • Se corrigieron las animaciones de PageTransformer (y las de MarginPageTransformer) que entraban en conflicto con las animaciones de cambio de un conjunto de datos (b/134658996).
  • Se corrigieron las animaciones de desplazamiento suave en grandes conjuntos de datos (límite de valor de entero float) (b/134858960).

Versión 1.0.0-beta02

19 de julio de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-beta02. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se quitó una dependencia no intencional de JaCoCo que se introdujo en 1.0.0-beta01 (b/137782951).

Versión 1.0.0-beta01

17 de julio de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-beta01. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Correcciones de errores

  • Se corrigió la falla de ViewPager2.updateCurrentItem que se producía durante el desplazamiento y la actualización de conjuntos de datos.
  • Se corrigió la falla de NullPointerException relacionada con ViewPager2.isLayoutRtl.
  • TOUCH_SLOP_PAGING ahora tiene una configuración táctil predeterminada.
  • Se corrigieron los eventos OnPageChangeCallback para los adaptadores vacíos (con página 0 en lugar de -1, para lograr paridad con ViewPager1).

Errores conocidos

Versión 1.0.0-alpha06

2 julio de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-alpha06. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Esta es nuestra última versión alfa planificada antes de congelar la API y pasar a la versión beta. Envíanos tus comentarios sobre la API.

Nuevas funciones

  • Fundamentos para mejorar la accesibilidad: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN, etcétera.

Cambios en la API

  • FragmentStateAdapter: Los elementos no principales de Fragment tienen un límite de STARTED, y su menuVisibility se configura como falso.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: Se corrigió la documentación para position.

Correcciones de errores

  • Se corrigió currentItem cuando ocurre un cambio en el conjunto de datos o el adaptador.
  • Se corrigió el problema de MarginPageTransformer relacionado con offscreenPageLimit.
  • Se corrigieron las acciones de accesibilidad en el comportamiento de FakeDrag.

Versión 1.0.0-alpha05

5 de junio de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-alpha05. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Nuevas funciones

  • Se introdujo ItemDecorator con un comportamiento coherente con RecyclerView.
  • Se introdujo MarginPageTransformer para proporcionar la capacidad de crear espacio entre páginas (fuera del recuadro).
  • Se introdujo CompositePageTransformer para proporcionar la capacidad de combinar múltiples PageTransformer.

Cambios en la API

  • Se cambió el nombre del método FragmentStateAdapter#getItem por FragmentStateAdapter#createFragment: el nombre anterior resultó ser una fuente de errores en el pasado.
  • Se cambió el valor de OFFSCREEN_PAGE_LIMIT_DEFAULT de 0 a -1. No es necesario cambiar el código cliente si se usa la constante OFFSCREEN_PAGE_LIMIT_DEFAULT.

Correcciones de errores

  • Se corrigió el comportamiento de getCurrentItem() cuando a SCROLL_STATE_SETTLING lo interrumpe un arrastre en la dirección opuesta.
  • Se solucionaron los problemas del cargador de la clase FragmentStateAdapter en el contexto "No mantener actividades".
  • Se mejoró la documentación de setOffscreenPageLimit.

Versión 1.0.0-alpha04

7 de mayo de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-alpha04. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Nuevas funciones

  • offscreenPageLimit: Permite un control estricto de la cantidad de objetos View o Fragment de páginas que se mantienen en la jerarquía de vistas.

Cambios en la API

  • Los atributos orientation e isUserScrollable ya no forman parte de SavedState.
  • Los métodos saveState y restoreState pasaron a ser definitivos en FragmentStateAdapter.
  • Las anotaciones ViewPager2.Orientation y ViewPager2.ScrollState ya no son públicas.

Correcciones de errores

  • SavedState: Se solucionó un problema relacionado con la restauración cuando se destruía o se recreaba una Activity.
  • SavedState: Se retrasó la restauración hasta que se configura el adaptador.
  • OnPageChangeCallback: Se solucionaron problemas menores.

Versión 1.0.0-alpha03

3 de abril de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-alpha03. Para conocer las confirmaciones incluidas en esta versión, consulta este vínculo.

Nuevas funciones

  • Capacidad para desplazar ViewPager2 de manera programática: fakeDragBy(offsetPx).

Cambios en la API

  • FragmentStateAdapter ahora requiere un objeto Lifecycle. Se agregaron dos constructores de utilidades para obtenerlo del host FragmentActivity o del host Fragment.

Correcciones de errores

  • Diversas correcciones de compatibilidad con Fragment:
    • Manejo de las actualizaciones de los conjuntos de datos cuando los fragmentos están minimizados o durante la rotación de una pantalla
    • Eliminación de fragmentos irrelevantes después de una rotación
    • Eliminación del estado guardado de los elementos quitados
  • PageChangeCallback: Se corrigió el cálculo fijo de desplazamiento de página para páginas con márgenes.

Versión 1.0.0-alpha02

13 de marzo de 2019

Lanzamiento de androidx.viewpager2:viewpager2:1.0.0-alpha02. Para obtener una lista completa de las confirmaciones incluidas en esta versión, consulta este artículo.

Nuevas funciones

  • Capacidad para inhabilitar la entrada del usuario (setUserInputEnabled, isUserInputEnabled).

Cambios en la API

  • Clase final de ViewPager2

Correcciones de errores

  • Correcciones de estabilidad de FragmentStateAdapter.

Versión 1.0.0-alpha01

7 de febrero de 2019

Lanzamiento de androidx.viewpager2:viewpager2 1.0.0-alpha01. Esta es la primera versión de ViewPager2.

Nuevas funciones

  • En comparación con la versión anterior, android.support.v4.view.ViewPager (VP1):
    • Compatibilidad con diseño de derecha a izquierda (RTL)
    • Compatibilidad con orientación vertical
    • notifyDataSetChanged completamente funcional (se corrigieron errores de VP1)

Cambios en la API

  • FragmentStateAdapter reemplaza a FragmentStatePagerAdapter
  • RecyclerView.Adapter reemplaza a PagerAdapter
  • registerOnPageChangeCallback reemplaza a addPageChangeListener

Errores conocidos

  • clipToPadding
  • Sin fakeDrag
  • JavaDoc
  • Desplazamiento anidado paralelo a la orientación
  • Sin control de límite fuera de pantalla
  • Se necesita una mejor integración con TabLayout
  • Sin método set para pageWidth (obligatorio: 100%/100%)
  • PageTransformer: No es posible elegir la capa de hardware/software; no hay opción de orden de dibujo inverso
  • Se mantiene el elemento actual visible al insertar una página antes de la actual
  • Se debe mejorar la navegación del teclado
  • Pronto se aplicarán mejoras en la estabilidad y el rendimiento de FragmentStateAdapter