A Visualização do desenvolvedor para Android 11 já está disponível. Teste e compartilhe seu feedback.

Paging

A Paging Library facilita o carregamento gradual e tranquilo de dados no RecyclerView do seu app.

Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
18 de dezembro de 2019 2.1.1 - - -

Como declarar dependências

Para adicionar uma dependência ao Paging, é preciso adicionar o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

    dependencies {
      def paging_version = "2.1.1"

      implementation "androidx.paging:paging-runtime:$paging_version" // For Kotlin use paging-runtime-ktx

      // alternatively - without Android dependencies for testing
      testImplementation "androidx.paging:paging-common:$paging_version" // For Kotlin use paging-common-ktx

      // optional - RxJava support
      implementation "androidx.paging:paging-rxjava2:$paging_version" // For Kotlin use paging-rxjava2-ktx
    }
    

Para ver mais informações sobre o uso de extensões Kotlin, consulte a documentação do Android KTX.

Para ver mais informações sobre dependências, consulte Adicionar dependências de compilação.

Versão 2.1.1

Versão 2.1.1

18 de dezembro de 2019

Lançamento do androidx.paging:paging-*:2.1.1. A versão 2.2.1 contém essas confirmações (link em inglês).

Correções de bugs

  • Os carregamentos iniciais contíguos de PositionalDataSources agora estão centralizados no último acesso quando os marcadores estão desativados

Versão 2.1.0

Versão 2.1.0

25 de janeiro de 2019

Lançamento do Paging 2.1.0 sem mudanças de 2.1.0-rc01.

Versão 2.1.0-rc01

6 de dezembro de 2018

Lançamento do Paging 2.1.0-rc01 sem mudanças de 2.1.0-beta01.

Versão 2.1.0-beta01

1º de novembro de 2018

Lançamento do Paging 2.1.0-beta01 sem mudanças de 2.1.0-alpha01.

Versão 2.1.0-alpha01

12 de outubro de 2018

O Paging 2.1.0-alpha01 tem duas adições importantes: queda de página e bibliotecas de extensões KTX para cada artefato, além de várias outras alterações de API e correções bugs.

Mudanças na API

  • Adição de PagedList.Config.Builder.setMaxSize() para limitar o número de itens carregados na memória.
  • Adição de androidx.paging.Config() como alternativa Kotlin para PagedList.Config.Builder
  • Adição de androidx.paging.PagedList() como alternativa Kotlin para PagedList.Builder
  • Adição de DataSourceFactory.toLiveData() como alternativa Kotlin para LivePagedListBuilder
  • Adição de DataSourceFactory.toObservable() e toFlowable() como alternativas Kotlin para RxPagedListBuilder
  • Adição de AsyncPagedListDiffer.addPagedListListener() para ouvir quando a PagedList foi trocada. b/111698609 (link em inglês)
  • Adição de variante PagedListAdapter.onCurrentListChanged() que transmite a lista antiga e a nova. A variante anterior teve o uso suspenso.
  • Adição de variantes PagedListAdapter/AsyncPagedListDiffer.submitList() que recebem um callback extra que é acionado se/quando a pagedlist é exibida, depois da diferenciação. Isso permite que você sincronize uma troca de PagedList com outras atualizações da IU. b/73781068 (link em inglês)
  • Adição de PagedList.getLoadedCount() para informar quantos itens estão na memória. Observe que o valor de retorno será sempre igual a .size() se os marcadores estiverem desativados.

Correções de bugs

  • Correção de uma disputa ao diferenciar se as listas são reutilizadas. b/111591017 (link em inglês)
  • PagedList.loadAround() agora gera IndexOutOfBoundsException quando o índice é inválido. Anteriormente, ele poderia falhar com uma exceção diversa incerta.
  • Correção de um caso em que um tamanho de carga inicial extremamente pequeno junto com dados inalterados resultava em nenhum outro carregamento. b/113122599 (link em inglês)

Versão 2.0.0

Versão 2.0.0

1º de outubro de 2018

O Paging 2.0.0 foi lançado com uma única correção de bug.

Correções de bugs

  • Correção de uma falha que poderia ocorrer com rolagem muito rápida usando PositionalDataSource e marcadores. b/114635383 (link em inglês).

Versão 2.0.0-beta01

2 de julho de 2018

Correções de bugs

  • Correção de conteúdo ausente em alguns casos de prefixo (marcadores de posição desativados, PositionalDataSource). b/80149146 (link em inglês)
  • Já lançado em 1.0.1. Correção de falhas em que PagedListAdapter e AsyncPagedListDiffer não sinalizavam eventos de movimentação. b/110711937 (link em inglês)

Dependências anteriores ao AndroidX

Para as seguintes versões do Paging anteriores ao AndroidX, inclua estas dependências:

dependencies {
        def paging_version = "1.0.0"

        implementation "android.arch.paging:runtime:$paging_version"

        // alternatively - without Android dependencies for testing
        testImplementation "android.arch.paging:common:$paging_version"

        // optional - RxJava support
        implementation "android.arch.paging:rxjava2:$paging_version"
    }
    

Versão 1.0.1

Versão 1.0.1

26 de junho de 2018

O Paging 1.0.1 foi lançado com uma única correção de bug em runtime. É altamente recomendável usar o 1.0.1 por questão de estabilidade. Paging RxJava2 1.0.1 também foi liberado e é idêntico ao 1.0.0-rc1.

Correções de bugs

  • Correção de falhas em que PagedListAdapter e AsyncPagedListDiffer não sinalizavam eventos de movimentação. b/110711937 (link em inglês)

RxJava2 versão 1.0.0

RxJava2 Versão 1.0.0-rc1

16 de maio de 2018

O Paging 1.0.0-rc1 RxJava2 está progredindo para se tornar candidato a lançamento sem mudanças desde o Alfa inicial.

Versão 1.0.0

Versão 1.0.0-rc1

19 de abril de 2018 Candidato a lançamento do Paging

Não temos outros problemas conhecidos ou novos recursos programados para o Paging versão 1.0.0. Faça upgrade dos seus projetos para usar 1.0.0-rc1 e ajude a testá-lo para que possamos lançar um 1.0.0 sólido.

Não há mudanças nessa versão. Ela é a mesma que 1.0.0-beta1.

Versão 1.0.0-beta01

5 de abril de 2018

O Paging ficará na versão Beta por um breve período antes de progredir para candidato a lançamento. Não estamos planejando outras mudanças na API para o Paging 1.0, e a resistência a qualquer mudança na API é muito alta.

A compatibilidade do RxJava2 Alfa com o Paging foi lançada como um módulo opcional diferente (android.arch.paging:rxjava2:1.0.0-alpha1) e a versão dele será temporariamente controlada em separado até que ele se estabilizar.

Essa nova biblioteca traz uma alternativa ao RxJava2 para LivePagedListBuilder, capaz de construir Observables e Flowables, usando Schedulers em vez de Executors:

Kotlin

    val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
            .setFetchScheduler(myNetworkScheduler)
            .buildObservable()
    

Java

    Observable<PagedList<Item>> pagedItems =
            RxPagedListBuilder(myDataSource, /* page size */ 50)
                    .setFetchScheduler(myNetworkScheduler)
                    .buildObservable();
    

Novos recursos

  • Adição de RxPagedListBuilder por meio do novo artefato android.arch.paging:rxjava2.

Mudanças na API

  • Mudanças de API para esclarecer o papel dos executores em builders:

    • setBackgroundThreadExecutor() renomeado para setFetchExecutor() (em PagedList.Builder e LivePagedListBuilder)

    • setMainThreadExecutor() renomeado para setNotifyExecutor() (em PagedList.Builder).

  • Correção do membro PagedList.mCallbacks para que seja particular.

Correções de bugs

  • LivePagedListBuilder aciona o carregamento inicial de PagedList no executor especificado, em vez do pool de linhas de execução de IO dos Componentes de arquitetura.

  • Correção do comportamento de invalidação em wrappers DataSource internos, usados para implementar o DataSource.map, bem como o carregamento de PositionalDataSource com marcadores desativados b/77237534 (link em inglês)

Versão 1.0.0-alpha7

21 de março de 2018

Lançamento do Paging 1.0.0-alpha7 junto com o Lifecycles 1.1.1. Como Paging alpha7 depende do movimento da classe Function mencionada acima, você precisará atualizar sua dependência de lifecycle:runtime para android.arch.lifecycle:runtime:1.1.1.

O Paging alpha7 está sendo planejado para ser a versão final antes de chegar à versão beta.

Mudanças na API

  • Os objetos DataSource.LoadParams agora têm um construtor público e os objetos DataSource.LoadCallback agora são abstratos. Isso permite realizar o wrapper de DataSource ou testar diretamente um DataSource com um callback simulado. b/72600421 (link em inglês)
  • Mapeadores para DataSource e DataSource.Factory
    • map(Function<IN,OUT>) permite que você transforme, envolva ou decore resultados carregados por um DataSource.
    • mapByPage(<List<IN>,List<OUT>>) proporciona o mesmo para o processamento em lote. Por exemplo, se os itens carregados do SQL precisarem consultar também um banco de dados separado, isso poderá ser feito em lote.
  • PagedList#getDataSource() é adicionado como um método de conveniência b/72611341 (link em inglês)
  • Todas as classes obsoletas foram removidas da API, incluindo os elementos remanescentes do pacote recyclerview.extensions e o LivePagedListProvider.
  • DataSource.Factory é modificado de uma interface para uma classe abstrata para ativar a funcionalidade do mapa.

Correções de bugs

  • Os Builders alterados serão finais. b/70848565 (link em inglês)
  • A implementação de DataSource da Room agora foi corrigida para lidar com consultas de várias tabelas. Essa correção está na Room 1.1.0-beta1, veja acima.
  • Correção de um bug em que o BoundaryCallback.onItemAtEndLoaded não seria invocado para PositionalDataSource se os marcadores estiverem ativados e o tamanho total fosse um múltiplo exato do tamanho da página.

Versão 1.0.0-alpha5

22 de janeiro de 2018

Correções de bugs

  • Correção do carregamento de página quando os marcadores de posição estão desativados. b/70573345 (link em inglês)
  • Criação de registros adicionais para rastrear o bug IllegalArgumentException b/70360195 (e suposta correção do lado da Room).
  • Correções de código de amostra Javadoc. b/70411933, b/71467637 (links em inglês)