ViewPager2
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.
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 con RecyclerView
1.3.1-rc01
o versiones posteriores. ViewPager2
ahora propaga correctamente los elementosCollectionInfo
yCollectionItemInfo
que RecyclerView1.2.0-alpha02
y 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 deFragmentStateAdapter
- Se solucionó el problema de
FragmentStateAdapter
con la visibilidad del menú de un fragmento inicial cuando se agregaba un fragmento aFragmentManager
- Se corrigió el despacho de las inserciones de ventana: ahora todas las páginas tienen las mismas inserciones. Debido a la forma en que se despachan
WindowInsets
en versiones de API anteriores (nivel de API inferior a 30) que pueden evitar que las inserciones estén disponibles para vistas del mismo nivel, debes habilitar esta corrección a través deWindowInsetsApplier.install(viewPager2)
si quieres 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 devoluciones de llamada para guardar el estado del fragmento a
FragmentTransactionCallback
(I45b90). ViewPager2
ya no intenta corregir el despacho deWindowInsets
dañado de versiones anteriores de la API (< 30), porque la corrección en sí puede ser perjudicial para los elementos del mismo nivel deViewPager2
La solución aún está disponible, pero ahora se debe aceptar para que los desarrolladores puedan tomar decisiones caso por caso. Para habilitar la corrección, llama aWindowInsetsApplier.install(viewPager2))
. (Ic9a85).
Correcciones de errores
- Soluciona los problemas de compatibilidad con versiones más recientes de
RecyclerView
. Los usuarios de esta versión deViewPager2
deben actualizar aRecyclerView
1.3.1-rc01 como mínimo.
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
Actualiza AndroidX para usar Kotlin 1.4 (Id6471, b/165307851, b/165300826)
Se movió a la orientación a Java 8 para todas las bibliotecas de AndroidX. (2923f39).
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 deFragmentStateAdapter
(Ibda77).
Correcciones de errores
- Se solucionó el problema de
FragmentStateAdapter
con la visibilidad del menú de un fragmento inicial cuando se agregaba un fragmento aFragmentManager
(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 de 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ónFragment
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)
ycanScrollVertically(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 deFragment
(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 deFragment
(b/134246546). - Se corrigieron los problemas con
currentItem
yscrollState
cuando se cambia un conjunto de datos durante un desplazamiento suave (casos límite) (b/137642608). - Se corrigieron las animaciones de
PageTransformer
(y las deMarginPageTransformer
) 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 conViewPager2.isLayoutRtl
. TOUCH_SLOP_PAGING
ahora tiene una configuración táctil predeterminada.- Se corrigieron los eventos
OnPageChangeCallback
para los adaptadores vacíos (con página0
en lugar de-1
, para lograr paridad conViewPager1
).
Errores conocidos
- Todavía estamos trabajando en los problemas pendientes restantes, antes de pasar a la versión estable.
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 deFragment
tienen un límite deSTARTED
, y sumenuVisibility
se configura como falso.PageTransformer
,MarginPageTransformer
,CompositePageTransformer
: Se corrigió la documentación paraposition
.
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 conoffscreenPageLimit
. - 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 conRecyclerView
. - 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últiplesPageTransformer
.
Cambios en la API
- Se cambió el nombre del método
FragmentStateAdapter#getItem
porFragmentStateAdapter#createFragment
: el nombre anterior resultó ser una fuente de errores en el pasado. - Se cambió el valor de
OFFSCREEN_PAGE_LIMIT_DEFAULT
de0
a-1
. No es necesario cambiar el código cliente si se usa la constanteOFFSCREEN_PAGE_LIMIT_DEFAULT
.
Correcciones de errores
- Se corrigió el comportamiento de
getCurrentItem()
cuando aSCROLL_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 objetosView
oFragment
de páginas que se mantienen en la jerarquía de vistas.
Cambios en la API
- Los atributos
orientation
eisUserScrollable
ya no forman parte deSavedState
. - Los métodos
saveState
yrestoreState
pasaron a ser definitivos enFragmentStateAdapter
. - Las anotaciones
ViewPager2.Orientation
yViewPager2.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 unaActivity
.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 objetoLifecycle
. Se agregaron dos constructores de utilidades para obtenerlo del hostFragmentActivity
o del hostFragment
.
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 aFragmentStatePagerAdapter
RecyclerView.Adapter
reemplaza aPagerAdapter
registerOnPageChangeCallback
reemplaza aaddPageChangeListener
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