Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Paging

A Paging Library facilita o carregamento gradual e tranquilo de dados no RecyclerView do seu app. Para ver mais informações, consulte os documentos de referência.

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 para os artefatos necessários no arquivo build.gradle do seu app ou módulo:

    dependencies {
      def paging_version = "2.1.0"

      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.0

25 de janeiro de 2019

Lançamento do Paging 2.1.0 sem alterações do 2.1.0-rc01.

Versão 2.1.0-rc01

6 de dezembro de 2018

O Paging 2.1.0-rc01 foi lançado sem alterações do 2.1.0-beta01.

Versão 2.1.0-beta01

1º de novembro de 2018

O Paging 2.1.0-beta01 foi lançado sem alterações do 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 uma alternativa Kotlin para PagedList.Config.Builder
  • Adição de androidx.paging.PagedList() como uma alternativa Kotlin para PagedList.Builder
  • Adição de DataSourceFactory.toLiveData() como uma alternativa Kotlin para LivePagedListBuilder
  • Adição de DataSourceFactory.toObservable() e toFlowable() como alternativas Kotlin para RxPagedListBuilder
  • Adição de AsyncPagedListDiffer.addPagedListListener() para ouvir quando PagedList é trocado. b/111698609
  • Adição da 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 adicional que é acionado se/quando a pagedlist é exibida, após a diferenciação. Isso permite que você sincronize uma troca de PagedList com outras atualizações da IU. b/73781068
  • Adição de PagedList.getLoadedCount() para informar quantos itens estão na memória. Observe que o valor de retorno é sempre igual a .size() se os marcadores de posição estiverem desativados.

Correções de bugs

  • Correção de uma disputa ao diferenciar se as listas são reutilizadas. b/111591017
  • 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 combinado com dados inalterados resultava na ausência de qualquer outro carregamento. b/113122599

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 de posição. b/114635383.

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
  • Correção de falhas em que PagedListAdapter e AsyncPagedListDiffer não sinalizavam eventos de movimentação (já lançada no 1.0.1). b/110711937

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

26 de junho de 2018

O Paging 1.0.1 foi lançado com uma única correção de bug no runtime. É altamente recomendável usar o 1.0.1 por questão de estabilidade. O Paging RxJava2 1.0.1 também foi lançado 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

RxJava2 Versão 1.0.0-rc1

16 de maio de 2018

O RxJava2 1.0.0-rc1 do Paging está passando para candidato a lançamento sem alterações do alfa inicial.

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 a versão 1.0.0 do Paging. Faça upgrade dos seus projetos para usar o 1.0.0-rc1 e ajude a testá-lo para que possamos lançar um 1.0.0 sólido.

Não há alterações 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 alterações de API para o Paging 1.0, e a resistência a qualquer alteração de 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 estabilize.

Essa nova biblioteca traz uma alternativa 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

  • RxPagedListBuilder é adicionado por meio do novo artefato android.arch.paging:rxjava2.

Alterações na API

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

    • Renomeação de setBackgroundThreadExecutor() para setFetchExecutor() (em PagedList.Builder e LivePagedListBuilder)

    • Renomeação de setMainThreadExecutor() para setNotifyExecutor() (em PagedList.Builder)

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

Correções de bugs

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

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

Versão 1.0.0-alpha7

21 de março de 2018

O Paging 1.0.0-alpha7 foi lançado junto com o Lifecycles 1.1.1. Como o 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 planejamento é que o Paging alpha7 seja a versão final antes do Paging chegar à versão Beta.

Alterações na API

  • Agora, os objetos DataSource.LoadParams têm um construtor público, e os objetos DataSource.LoadCallback são abstratos. Isso permite realizar o wrapper de DataSource ou testar diretamente um DataSource com um callback simulado. b/72600421
  • Mapeadores para DataSource e DataSource.Factory
    • map(Function<IN,OUT>) permite que você transforme, una ou decore os 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() foi adicionado como um método conveniente. b/72611341
  • Todas as classes obsoletas foram removidas da API, incluindo os elementos remanescentes do pacote recyclerview.extensions e o LivePagedListProvider.
  • DataSource.Factory é alterado de uma interface para uma classe abstrata para ativar a funcionalidade de mapa.

Correções de bugs

  • Os Builders alterados serão finais. b/70848565
  • A implementação de DataSource da Room agora foi corrigida para lidar com consultas de várias tabelas. Essa correção consta na Room 1.1.0-beta1, veja acima.
  • Correção de um bug em que BoundaryCallback.onItemAtEndLoaded não era invocado para PositionalDataSource se os marcadores de posição estivessem 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
  • 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 exemplo Javadoc. b/70411933, b/71467637