ViewPager2

Mostre visualizações ou fragmentos em um formato deslizante.
Atualização mais recente Versão estável Versão candidata a lançamento Versão Beta Versão Alfa
24 de maio de 2023 1.0.0 - 1.1.0-beta02 -

Dependências do AndroidX

Para usar ViewPager2, adicione a seguinte dependência do AndroidX ao arquivo build.gradle do projeto:

Groovy

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

Kotlin

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

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas conhecidos nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.1.0

Versão 1.1.0-beta02

24 de maio de 2023

Lançamento de androidx.viewpager2:viewpager2:1.1.0-beta02. A versão 1.1.0-beta02 contém estas confirmações.

Mudanças na API

  • Adição de callbacks para salvar o estado do fragmento em FragmentTransactionCallback (I45b90).
  • ViewPager2 agora não tenta mais corrigir o envio de WindowInsets corrompido de versões antigas da API (< 30), porque a própria correção pode ser prejudicial para irmãos de ViewPager2 A correção ainda está disponível, mas agora é possível decidir o que fazer de acordo com cada caso. Ative a correção chamando WindowInsetsApplier.install(viewPager2)). (Ic9a85).

Correções de bugs

  • Correção de problemas de compatibilidade com versões mais recentes do RecyclerView. Os usuários desta versão do ViewPager2 precisam atualizar para pelo menos a RecyclerView 1.3.1-rc01.

Versão 1.1.0-beta01

4 de agosto de 2021

Lançamento de androidx.viewpager2:viewpager2:1.1.0-beta01. A versão 1.1.0-beta01 contém estas confirmações.

Mudanças na API

Correções de bugs

  • Correção no envio de encartes de janela: todas as páginas agora recebem os mesmos encartes (I47fef)

Versão 1.1.0-alpha01

1º de abril de 2020

androidx.viewpager2:viewpager2:1.1.0-alpha01 é lançado. A versão 1.1.0-alpha01 contém estas confirmações.

Essa versão acompanha uma mudança em RecyclerView 1.2.0-alpha02 preenchendo CollectionInfo e CollectionItemInfo, que o RecyclerView não oferece mais por padrão. Ao atualizar para RecyclerView 1.2.0-alpha02, atualize também ViewPager2 para evitar regressões de acessibilidade.

Novos recursos

  • A interface FragmentTransactionCallback foi incluída para detectar mudanças no ciclo de vida do fragmento que ocorrem no FragmentStateAdapter (Ibda77, link em inglês)

Correções de bugs

  • Correção do problema FragmentStateAdapter com a visibilidade inicial do menu de fragmentos ao adicionar um fragmento ao FragmentManager. (I9d2ff, b/144442240, links em inglês)

Versão 1.0.0

Versão 1.0.0

20 de novembro de 2019

androidx.viewpager2:viewpager2:1.0.0 é lançado sem mudanças desde 1.0.0-rc01. A versão 1.0.0 contém essas confirmações (link em inglês).

Principais recursos de 1.0.0

  • Melhorias da implementação anterior do ViewPager:
    • Compatibilidade com layout RTL (da direita para a esquerda)
    • Compatibilidade com orientação vertical
    • Compatibilidade confiável com Fragment (incluindo processamento de mudanças na coleção subjacente de Fragment)
    • Animações de mudança do conjunto de dados (incluindo compatibilidade com DiffUtil).
  • Migração fácil da implementação do ViewPager anterior (paridade de API sempre que possível). Consulte o guia de migração e o app de amostra (link em inglês).

Consulte o guia sobre como usar o ViewPager2 para deslizar entre fragmentos.

Versão 1.0.0-rc01

23 de outubro de 2019

androidx.viewpager2:viewpager2:1.0.0-rc01 é lançado sem mudanças desde 1.0.0-beta05. A versão 1.0.0-rc01 contém essas confirmações (link em inglês).

Versão 1.0.0-beta05

9 de outubro de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-beta05. A versão 1.0.0-beta05 contém essas confirmações (link em inglês).

Correções de bugs

  • Correção de requestFocus em uma página fora da tela que causa mudança de página. O comportamento agora é consistente com o ViewPager original. (b/140656866).
  • Correção de focus que permanece em uma página fora da tela após mudança de página. Agora, o foco fica liberado ao mudar de página. (b/140656866).
  • Correção de pedidos de Fragment para transações de pausar/retomar ao mudar de página. Agora, sempre pausamos o item principal antigo antes de retomar o novo item (b/139489059).
  • Correção de canScrollHorizontally(int) e canScrollVertically(int). Agora, eles retornam se o ViewPager2 consegue rolar na direção indicada (b/141848404)
  • Um problema em SwipeRefreshLayout foi corrigido para funcionar melhor com o ViewPager2.

Versão 1.0.0-beta04

5 de setembro de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-beta04. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Correção de um bug de caso extremo de FragmentStateAdapter com pilha de retorno Fragment (b/139095195).
  • Correção de EditText com determinadas configurações de atributo que causam um salto de rolagem/página ao digitar/focar (b/138044582, b/139432498).
  • Correção de um problema com instâncias ItemDecoration e solução alternativa para o posicionamento do indicador de rolagem (b/139012032).
  • Corrigidos vários problemas em outros componentes para funcionar melhor com ViewPager2: RecyclerView, NestedScrollView e Navegação.

Versão 1.0.0-beta03

7 de agosto de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-beta03. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Correção de problema de FragmentStateAdapter com o estado Fragment transitório b/134246546.
  • Correção dos problemas de currentItem e scrollState, quando um conjunto de dados muda durante uma rolagem suave (casos extremos tratados) b/137642608.
  • Correção para as animações de PageTransformer (incluindo MarginPageTransformer) em conflito com as animações de alteração do conjunto de dados b/134658996.
  • Correção de animações de rolagem suave em grandes conjuntos de dados (limite do valor de número inteiro de float) b/134858960.

Versão 1.0.0-beta02

19 de julho de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-beta02. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Correções de bugs

  • Removida dependência não intencional do Jacoco, introduzida no 1.0.0-beta01 (b/137782951, link em inglês)

Versão 1.0.0-beta01

17 de julho de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-beta01. As confirmações incluídas nessa versão podem ser encontradas neste link.

Correções de bugs

  • Correção da falha de ViewPager2.updateCurrentItem ao rolar e atualizar o conjunto de dados.
  • Correção da falha de NullPointerException relacionada a ViewPager2.isLayoutRtl.
  • TOUCH_SLOP_PAGING agora é uma tolerância de toque padrão.
  • Correção de eventos OnPageChangeCallback para adaptadores vazios (página 0, em vez de -1, para paridade com ViewPager1).

Problemas conhecidos

  • Ainda estamos trabalhando para resolver problemas pendentes antes de passar para a versão Estável.

Versão 1.0.0-alpha06

2 de julho de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-alpha06. As confirmações incluídas nessa versão podem ser encontradas aqui (link em inglês).

Esse é o nosso último alfa planejado antes de congelar a API e passar para a versão beta. Envie-nos um feedback sobre a API.

Novos recursos

  • Fundamentos para melhoria da acessibilidade: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN etc.

Mudanças na API

  • FragmentStateAdapter: Fragments de itens não principais estão limitados a STARTED, e o menuVisibility correspondente é definido como "falso".
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: correção da documentação para position.

Correções de bugs

  • Correção de currentItem depois da mudança do conjunto de dados/adaptador.
  • Corrigido o problema de MarginPageTransformer com offscreenPageLimit.
  • Corrigidas ações de acessibilidade em comportamento FakeDrag.

Versão 1.0.0-alpha05

5 de junho de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-alpha05. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • Introdução de ItemDecorator com um comportamento consistente com RecyclerView.
  • Introdução de MarginPageTransformer para oferecer a capacidade de criar espaço entre as páginas (fora da inserção da página).
  • Introdução de CompositePageTransformer para oferecer a capacidade de combinar vários PageTransformers.

Mudanças na API

  • Renomeação do método FragmentStateAdapter#getItem para FragmentStateAdapter#createFragment: o nome anterior do método se mostrou uma fonte de bugs no passado.
  • Mudança do valor OFFSCREEN_PAGE_LIMIT_DEFAULT de 0 para -1. Não será necessário alterar o código do cliente se a constante OFFSCREEN_PAGE_LIMIT_DEFAULT for usada.

Correções de bugs

  • Corrigido o comportamento de getCurrentItem() quando SCROLL_STATE_SETTLING é interrompido por uma ação de arrastar na direção oposta.
  • Resolvidos os problemas no carregador de classe FragmentStateAdapter no contexto "Don't keep activities".
  • Aprimorada a documentação de setOffscreenPageLimit.

Versão 1.0.0-alpha04

7 de maio de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-alpha04. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • offscreenPageLimit: permite um controle rigoroso do número de Views e Fragments da páginas mantidas na hierarquia de visualização.

Mudanças na API

  • Os atributos orientation e isUserScrollable não fazem mais parte do SavedState.
  • Os métodos saveState e restoreState foram considerados finais em FragmentStateAdapter.
  • As anotações ViewPager2.Orientation e ViewPager2.ScrollState se tornaram não públicas.

Correções de bugs

  • SavedState: foi corrigido um problema com a restauração quando Activity é destruído/recriado.
  • SavedState: a restauração é atrasada até que o adaptador seja configurado.
  • OnPageChangeCallback: casos extremos menores foram corrigidos.

Versão 1.0.0-alpha03

3 de abril de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-alpha03. As confirmações incluídas nessa versão podem ser encontradas neste link.

Novos recursos

  • Capacidade de rolar programaticamente o ViewPager2: fakeDragBy(offsetPx).

Mudanças na API

  • FragmentStateAdapter agora requer um objeto Lifecycle. Dois construtores de utilitários foram adicionados para extraí-lo dos hosts FragmentActivity ou Fragment.

Correções de bugs

  • Várias correções de compatibilidade de Fragment:
    • Gerenciamento de atualizações de conjuntos de dados enquanto elas estão minimizadas ou durante uma rotação de tela.
    • Remoção de Fragments irrelevantes depois da rotação.
    • Remoção do estado salvo dos itens removidos.
  • PageChangeCallback: correção do cálculo de ajuste para páginas com margens.

Versão 1.0.0-alpha02

13 de março de 2019

Lançamento de androidx.viewpager2:viewpager2:1.0.0-alpha02. A lista completa de confirmações incluídas nessa versão pode ser encontrada neste link.

Novos recursos

  • Capacidade de desativar a entrada do usuário (setUserInputEnabled, isUserInputEnabled).

Mudanças na API

  • A classe ViewPager2 foi considerada final.

Correções de bugs

  • Estabilidade de FragmentStateAdapter corrigida.

Versão 1.0.0-alpha01

7 de fevereiro de 2019

Lançamento de androidx.viewpager2:viewpager2 1.0.0-alpha01. Essa é a primeira versão do ViewPager2.

Novos recursos

  • Comparação com o antecessor android.support.v4.view.ViewPager (VP1):
    • Compatibilidade com layout da direita para a esquerda (RTL, na sigla em inglês).
    • Compatibilidade com orientação vertical.
    • notifyDataSetChanged totalmente funcional (bugs do VP1 resolvidos).

Mudanças na API

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

Problemas conhecidos

  • clipToPadding.
  • Sem fakeDrag.
  • JavaDoc.
  • Rolagem aninhada paralela à orientação.
  • Sem controle de limite fora da tela.
  • Requer melhor integração do TabLayout.
  • Sem configurador de pageWidth (forçado 100%/100%).
  • Transformador de página: sem opção de camada de hardware/software. Nenhuma ordem de desenho reversa.
  • O item atual continua visível depois que uma página é inserida antes dele.
  • A navegação pelo teclado precisa de um trabalho.
  • Melhorias na estabilidade e desempenho de FragmentStateAdapter em breve.