ViewPager2

Visualizza le visualizzazioni o i frammenti in un formato scorrevole.
Ultimo aggiornamento Release stabile Candidato per la release Release beta Release alpha
14 maggio 2024 1.1.0 - - -

Dipendenze AndroidX

Per utilizzare ViewPager2, aggiungi la seguente dipendenza AndroidX al file build.gradle del tuo progetto:

Alla moda

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

Kotlin

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

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di segnalare un nuovo problema, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per saperne di più, consulta la documentazione di Issue Tracker.

Versione 1.1.0

Versione 1.1.0

14 maggio 2024

androidx.viewpager2:viewpager2:1.1.0 è stato rilasciato. La versione 1.1.0 contiene questi commit.

Modifiche importanti dalla versione 1.0.0

  • Sono stati corretti gli arresti anomali quando viene utilizzato con RecyclerView 1.3.1-rc01 o versioni successive.
  • ViewPager2 ora compila correttamente CollectionInfo e CollectionItemInfo che RecyclerView 1.2.0-alpha02 e versioni successive non compilano più per impostazione predefinita.
  • È stata aggiunta l'interfaccia FragmentTransactionCallback per l'ascolto delle modifiche al ciclo di vita dei fragment che si verificano all'interno di FragmentStateAdapter.
  • È stato risolto il problema FragmentStateAdapter relativo alla visibilità iniziale del menu dei frammenti quando si aggiunge un frammento a FragmentManager.
  • È stato corretto l'invio degli inset della finestra: ora tutte le pagine ricevono gli stessi inset. A causa del modo in cui vengono inviati i WindowInsets nelle versioni precedenti dell'API (< API 30), che possono impedire che gli inset siano disponibili per le visualizzazioni di pari livello, devi attivare questa correzione tramite WindowInsetsApplier.install(viewPager2) se vuoi applicare gli inset sui dispositivi < API 30.

Versione 1.1.0-rc01

1° maggio 2024

androidx.viewpager2:viewpager2:1.1.0-rc01 viene rilasciato senza modifiche significative rispetto alla versione 1.1.0-beta02. La versione 1.1.0-rc01 contiene questi commit.

Versione 1.1.0-beta02

24 maggio 2023

androidx.viewpager2:viewpager2:1.1.0-beta02 è stato rilasciato. La versione 1.1.0-beta02 contiene questi commit.

Modifiche alle API

  • Aggiunta di callback di salvataggio dello stato del frammento a FragmentTransactionCallback. (I45b90)
  • ViewPager2 ora non tenta più di correggere l'invio WindowInsets non funzionante delle versioni precedenti dell'API (< 30), perché la correzione stessa può essere dannosa per i fratelli di ViewPager2. La correzione è ancora disponibile, ma è diventata un'opzione di attivazione, in modo che gli sviluppatori possano decidere caso per caso. Attiva la correzione chiamando il numero WindowInsetsApplier.install(viewPager2)). (Ic9a85)

Correzioni di bug

  • Risolvi i problemi di compatibilità con le versioni più recenti di RecyclerView. Gli utenti di questa versione di ViewPager2 devono eseguire l'aggiornamento almeno alla versione RecyclerView 1.3.1-rc01.

Versione 1.1.0-beta01

4 agosto 2021

androidx.viewpager2:viewpager2:1.1.0-beta01 è stato rilasciato. La versione 1.1.0-beta01 contiene questi commit.

Modifiche alle API

Correzioni di bug

  • È stato corretto l'invio degli inset della finestra. Ora tutte le pagine ricevono gli stessi inset. (I47fef)

Versione 1.1.0-alpha01

1° aprile 2020

androidx.viewpager2:viewpager2:1.1.0-alpha01 è stato rilasciato. La versione 1.1.0-alpha01 contiene questi commit.

Questa release accompagna una modifica in RecyclerView 1.2.0-alpha02 tramite il popolamento di CollectionInfo e CollectionItemInfo che RecyclerView non fornisce più per impostazione predefinita. Quando esegui l'aggiornamento a RecyclerView 1.2.0-alpha02, aggiorna anche ViewPager2 per evitare regressioni dell'accessibilità.

Nuove funzionalità

  • È stata aggiunta l'interfaccia FragmentTransactionCallback per l'ascolto delle modifiche al ciclo di vita dei fragment che si verificano all'interno di FragmentStateAdapter. (Ibda77)

Correzioni di bug

  • È stato risolto il problema FragmentStateAdapter relativo alla visibilità iniziale del menu dei frammenti quando si aggiunge un frammento a FragmentManager. (I9d2ff, b/144442240)

Versione 1.0.0

Versione 1.0.0

20 novembre 2019

androidx.viewpager2:viewpager2:1.0.0 viene rilasciata senza modifiche rispetto alla versione 1.0.0-rc01. La versione 1.0.0 contiene questi commit.

Funzionalità principali della versione 1.0.0

  • Miglioramenti rispetto all'implementazione precedente di ViewPager:
    • Supporto del layout RTL (da destra a sinistra)
    • Supporto dell'orientamento verticale
    • Supporto affidabile di Fragment (inclusa la gestione delle modifiche alla raccolta di Fragment sottostante)
    • Animazioni di modifica del set di dati (incluso il supporto di DiffUtil)
  • Facile migrazione dall'implementazione precedente di ViewPager (parità delle API ove possibile). Consulta la guida alla migrazione e l'app di esempio.

Consulta la guida sull'utilizzo di ViewPager2 per scorrere tra i fragment.

Versione 1.0.0-rc01

23 ottobre 2019

androidx.viewpager2:viewpager2:1.0.0-rc01 viene rilasciato senza modifiche dal giorno 1.0.0-beta05. La versione 1.0.0-rc01 contiene questi commit.

Versione 1.0.0-beta05

9 ottobre 2019

androidx.viewpager2:viewpager2:1.0.0-beta05 è stato rilasciato. La versione 1.0.0-beta05 contiene questi commit.

Correzioni di bug

  • Correzione per requestFocus su una pagina fuori dallo schermo che causa un cambio di pagina. Il comportamento è ora coerente con il ViewPager originale. (b/140656866)
  • Correzione del problema relativo a focus che rimane su una pagina fuori schermo dopo un cambio di pagina. La messa a fuoco viene ora cancellata quando si cambia pagina. (b/140656866)
  • Correzione dell'ordinamento delle transazioni di Fragment pausa / ripristino durante il cambio di pagina (ora mettiamo sempre in pausa il vecchio elemento principale prima di ripristinare il nuovo). (b/139489059)
  • Correzione per canScrollHorizontally(int) e canScrollVertically(int): ora restituiscono se ViewPager2 può scorrere nella direzione specificata. (b/141848404)
  • È stato risolto un problema in SwipeRefreshLayout per migliorare il funzionamento con ViewPager2.

Versione 1.0.0-beta04

5 settembre 2019

androidx.viewpager2:viewpager2:1.0.0-beta04 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • Correzione del problema relativo al caso limite di FragmentStateAdapter con lo stack precedente di Fragment. (b/139095195)
  • Correzione di EditText con determinate configurazioni degli attributi che causano uno scorrimento/salto di pagina durante la digitazione/la messa a fuoco. (b/138044582, b/139432498)
  • Correzione di un problema con le istanze ItemDecoration e soluzione alternativa per il posizionamento dell'indicatore di overscroll. (b/139012032)
  • In altri componenti sono stati risolti diversi problemi per migliorare la compatibilità con ViewPager2: RecyclerView, NestedScrollView e Navigation.

Versione 1.0.0-beta03

7 agosto 2019

androidx.viewpager2:viewpager2:1.0.0-beta03 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • Correzione del problema FragmentStateAdapter con lo stato temporaneo Fragment. b/134246546
  • Correzione dei problemi relativi a currentItem e scrollState quando un set di dati viene modificato durante uno scorrimento fluido (casi limite risolti). b/137642608
  • Correzione delle animazioni di PageTransformer (incluso MarginPageTransformer) in conflitto con le animazioni di modifica del set di dati. b/134658996
  • Correzione delle animazioni di scorrimento fluido in set di dati di grandi dimensioni (limite di valori interi float). b/134858960

Versione 1.0.0-beta02

19 luglio 2019

androidx.viewpager2:viewpager2:1.0.0-beta02 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stata rimossa la dipendenza jacoco involontaria introdotta in 1.0.0-beta01. (b/137782951)

Versione 1.0.0-beta01

17 luglio 2019

androidx.viewpager2:viewpager2:1.0.0-beta01 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • Correzione dell'arresto anomalo di ViewPager2.updateCurrentItem durante lo scorrimento e l'aggiornamento del set di dati
  • Correzione dell'arresto anomalo di NullPointerException relativo a ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING ora è un margine di errore predefinito
  • OnPageChangeCallback eventi corretti per gli adattatori vuoti (pagina 0 anziché -1 per la parità con ViewPager1)

Problemi noti

Versione 1.0.0-alpha06

2 luglio 2019

androidx.viewpager2:viewpager2:1.0.0-alpha06 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Questa è l'ultima alpha pianificata prima del blocco dell'API e del passaggio alla beta. Forniscici un feedback sull'API.

Nuove funzionalità

  • Fondamenta per una migliore accessibilità: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN e così via.

Modifiche alle API

  • FragmentStateAdapter: gli Fragment non principali sono limitati a STARTED e il relativo menuVisibility è impostato su false.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: documentazione per positioncorretta.

Correzioni di bug

  • currentItem dopo la correzione della modifica del set di dati / dell'adattatore.
  • MarginPageTransformer con problema offscreenPageLimit risolto.
  • Comportamento delle azioni di accessibilità in FakeDrag corretto.

Versione 1.0.0-alpha05

5 giugno 2019

androidx.viewpager2:viewpager2:1.0.0-alpha05 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • ItemDecorator introdotto con un comportamento coerente con RecyclerView.
  • MarginPageTransformer introdotto per consentire di creare spazio tra le pagine (al di fuori del rientro della pagina).
  • È stato introdotto CompositePageTransformer per consentire la combinazione di più PageTransformer.

Modifiche alle API

  • Il metodo FragmentStateAdapter#getItem è stato rinominato in FragmentStateAdapter#createFragment. Il nome del metodo precedente si è rivelato una fonte di bug in passato.
  • Il valore di OFFSCREEN_PAGE_LIMIT_DEFAULT è cambiato da 0 a -1. Non è necessario modificare il codice client se viene utilizzata la costante OFFSCREEN_PAGE_LIMIT_DEFAULT.

Correzioni di bug

  • È stato corretto il comportamento di getCurrentItem() quando SCROLL_STATE_SETTLING viene interrotto da un trascinamento nella direzione opposta.
  • Risolti i problemi del caricatore di classi FragmentStateAdapter nel contesto "Non conservare le attività".
  • Documentazione di setOffscreenPageLimit migliorata.

Versione 1.0.0-alpha04

7 maggio 2019

androidx.viewpager2:viewpager2:1.0.0-alpha04 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • offscreenPageLimit: consente un controllo rigoroso del numero di pagine View / Fragment mantenute nella gerarchia di oggetti View

Modifiche alle API

  • Gli attributi orientation e isUserScrollable non fanno più parte di SavedState
  • I metodi saveState e restoreState sono stati resi finali in FragmentStateAdapter
  • ViewPager2.Orientation e ViewPager2.ScrollState annotazioni rese non pubbliche

Correzioni di bug

  • SavedState: è stato risolto un problema di ripristino quando Activity viene eliminato / ricreato
  • SavedState: ripristino ritardato finché l'adattatore non è impostato
  • OnPageChangeCallback: correzione di casi limite minori

Versione 1.0.0-alpha03

3 aprile 2019

androidx.viewpager2:viewpager2:1.0.0-alpha03 è stato rilasciato. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Possibilità di scorrere ViewPager2 in modo programmatico: fakeDragBy(offsetPx).

Modifiche alle API

  • FragmentStateAdapter ora richiede un oggetto Lifecycle. Sono stati aggiunti due costruttori di utilità per ottenerlo dall'host FragmentActivity o dall'host Fragment.

Correzioni di bug

  • Numerose correzioni al supporto di Fragment:
    • gestione degli aggiornamenti del set di dati quando la finestra è ridotta a icona o durante la rotazione dello schermo;
    • rimuovendo i frammenti irrilevanti dopo la rotazione;
    • rimuovendo lo stato salvato degli elementi rimossi.
  • PageChangeCallback: è stato corretto il calcolo dell'offset della pagina per le pagine con margini.

Versione 1.0.0-alpha02

13 marzo 2019

androidx.viewpager2:viewpager2:1.0.0-alpha02 è stato rilasciato. L'elenco completo dei commit inclusi in questa versione è disponibile qui.

Nuove funzionalità

  • Possibilità di disattivare l'input dell'utente (setUserInputEnabled, isUserInputEnabled)

Modifiche alle API

  • ViewPager2 class final

Correzioni di bug

  • FragmentStateAdapter correzioni della stabilità

Versione 1.0.0-alpha01

7 febbraio 2019

androidx.viewpager2:viewpager2 1.0.0-alpha01 è stato rilasciato. Questa è la prima release di ViewPager2.

Nuove funzionalità

  • Rispetto al suo predecessore android.support.v4.view.ViewPager (VP1):
    • Supporto del layout da destra a sinistra (RTL)
    • Supporto dell'orientamento verticale
    • notifyDataSetChanged completamente funzionale (bug VP1 risolti)

Modifiche alle API

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

Problemi noti

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • scorrimento nidificato parallelo all'orientamento
  • Nessun controllo del limite fuori schermo
  • ha bisogno di una migliore integrazione di TabLayout
  • nessun setter pageWidth (forzato al 100%/100%)
  • page transformer: nessuna scelta di livello hardware/software; nessun ordine di disegno inverso
  • mantieni l'elemento corrente visibile quando inserisci una pagina prima di quella corrente
  • La navigazione da tastiera richiede interventi
  • Miglioramenti della stabilità / delle prestazioni di FragmentStateAdapter in arrivo