O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Paging

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

Esta tabela lista todos os artefatos no grupo androidx.paging.

Artefato Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
paging-* 2.1.2 3.0.0-rc01 - -
paging-compose - - - 1.0.0-alpha08
Esta biblioteca foi atualizada pela última vez em 21 de abril de 2021

Declarar dependências

Para adicionar uma dependência à 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.2"

      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.

Como alternativa, você pode testar a versão Alfa da Paging 3.0. Para usar o Paging 3.0, adicione as seguintes dependências ao arquivo build.gradle:

dependencies {
  def paging_version = "3.0.0-rc01"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // Jetpack Compose Integration
  implementation "androidx.paging:paging-compose:1.0.0-alpha08"
}

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

Feedback

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

Criar novo problema

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

Paging Compose versão 1.0.0

Versão 1.0.0-alpha08

24 de fevereiro de 2021

Lançamento do androidx.paging:paging-compose:1.0.0-alpha08. A versão 1.0.0-alpha08 contém estas confirmações.

Atualizada para integração com o Compose 1.0.0-beta01.

Versão 1.0.0-alpha07

10 de fevereiro de 2021

Lançamento de androidx.paging:paging-compose:1.0.0-alpha07. A versão 1.0.0-alpha07 contém estas confirmações.

Atualizada para ser integrada ao Compose alpha12.

Versão 1.0.0-alpha06

28 de janeiro de 2021

Lançamento de androidx.paging:paging-compose:1.0.0-alpha06. A versão 1.0.0-alpha06 contém estas confirmações.

Correções de bugs

Atualizada para depender do Compose 1.0.0-alpha11.

Versão 1.0.0-alpha05

13 de janeiro de 2021

Lançamento de androidx.paging:paging-compose:1.0.0-alpha05. A versão 1.0.0-alpha05 contém estas confirmações.

Atualizada para depender do Compose 1.0.0-alpha10.

Versão 1.0.0-alpha04

16 de dezembro de 2020

Lançamento de androidx.paging:paging-compose:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Correções de bugs

  • As propriedades de conveniência, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append foram atualizadas para fazer a transição de Loading para NotLoading somente depois que os estados de carregamento do mediador e da origem forem NotLoading para garantir que a atualização remota tenha sido aplicada (I65619).

Versão 1.0.0-alpha03

2 de dezembro de 2020

Lançamento de androidx.paging:paging-compose:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

  • Atualização para corresponder ao Compose 1.0.0-alpha08.

Versão 1.0.0-alpha02

11 de novembro de 2020

androidx.paging:paging-compose:1.0.0-alpha02 é lançado. A versão 1.0.0-alpha02 contém essas confirmações.

Mudanças na API

  • Adição dos métodos .peek(), .snapshot(), .retry() e .refresh() a LazyPagingItems que expõem a mesma funcionalidade disponível em AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660)

Versão 1.0.0-alpha01

28 de outubro de 2020

androidx.paging:paging-compose:1.0.0-alpha01 é lançado. A versão 1.0.0-alpha01 contém essas confirmações (link em inglês).

Novos recursos

O artefato paging-compose fornece integração entre a biblioteca Paging e o Jetpack Compose. Um exemplo de uso simples:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

Versão 3.0.0

Versão 3.0.0-rc01

21 de abril de 2021

Lançamento de androidx.paging:paging-*:3.0.0-rc01. A versão 3.0.0-rc01 contém estas confirmações.

Correções de bugs

  • Correção de um problema em que o Paging às vezes envia eventos diferentes do ambiente autônomo para o RecyclerView, o que fazia com que determinados listeners fossem acionados antecipadamente (Ic507f, b/182510751).

Versão 3.0.0-beta03

24 de março de 2021

Lançamento de androidx.paging:paging-*:3.0.0-beta03. A versão 3.0.0-beta03 contém estas confirmações.

Correções de bugs

  • Reformulamos a forma como os marcadores são tratados quando a lista é recarregada para evitar saltos inesperados na RecyclerView. Consulte NullPaddedDiffing.md para ver mais detalhes (If1490, b/170027529, b/177338149).
  • Os vários builders PagedList (caminho de compatibilidade antigo) não chamam mais DataSource.Factory.create() de forma síncrona incorretamente na linha de execução principal quando .build() é chamado (b/182798948).

Versão 3.0.0-beta02

10 de Março de 2021

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

Mudanças na API

  • As extensões Rx3 agora propagam corretamente o requisito de ativação @ExperimentalCoroutinesApi. Anteriormente, elas eram marcadas no método @get, que é ignorado pelo Compilador de Kotlin devido a: https://youtrack.jetbrains.com/issue/KT-45227 (link em inglês) (I5733c).

Correções de bugs

  • Aplicação de restrições ao uso público de APIs experimentais (I6aa29, b/174531520).
  • Correção de um bug que fazia com que PagingState fosse sempre null quando a atualização remota era chamada.
  • Correção de um bug em que páginas vazias retornadas pela PagingSource podiam impedir que a Paging buscasse novamente para completar prefetchDistance, fazendo com que a Paging ficasse "travada".

Versão 3.0.0-beta01

10 de fevereiro de 2021

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

Mudanças na API

  • Os wrappers Rx2 e Rx3 agora expõem a anotação experimental de que dependem. Se você estiver usando os wrappers de compatibilidade Rx no paging-rxjava2 ou paging-rxjava3, precisará anotar os usos com @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d).

Correções de bugs

  • Correção de IndexOutOfBoundsException: Inconsistency detected, que era gerada às vezes ao usar APIs DataSource v2 com caminhos de compatibilidade.
  • A chamada isInvalid durante a inicialização da DataSource, quando usada por caminhos de compatibilidade, agora é iniciada corretamente em fetchDispatcher, e não na linha de execução principal. Isso corrige uma IllegalStateException devido ao acesso do Db na linha de execução principal ao usar a implementação PagingSource do Room.

Versão 3.0.0-alpha13

27 de janeiro de 2021

Lançamento do androidx.paging:paging-*:3.0.0-alpha13. A versão 3.0.0-alpha13 contém estas confirmações.

Mudanças na API

  • A implementação de PagingSource.getRefreshKey não é mais opcional. Agora ele é uma função abstrata sem implementação padrão. A migração de usuários pode continuar retornando a implementação padrão, que simplesmente retorna null, mas getRefreshKey() precisa ter uma implementação real que retorne uma chave baseada na posição de rolagem atual do usuário. Isso permite que a Paging continue o carregamento no centro da janela de visualização via PagingState.anchorPosition, se possível (I4339a).
  • InvalidatingPagingSourceFactory agora é uma classe final (Ia3b0a).
  • Permite a configuração do comportamento de separador de terminal (cabeçalho / rodapé) com um parâmetro SeparadorType adicional opcional. As duas opções são estas:
    • FULLY_COMPLETE: comportamento existente. Espera o PagingSource e o RemoteMediator marcarem endOfPaginationReached antes de adicionar separadores de terminal. Se RemoteMediator não for usado, o loadState remoto será ignorado. Isso é útil principalmente se você quiser exibir separadores de seção somente quando a seção estiver totalmente carregada, incluindo a busca da origem remota, por exemplo, a rede.
    • SOURCE_COMPLETE: aguarda somente que o PagingSource marque endOfPaginationReached, mesmo que o RemoteMediator seja usado. Isso permite que cabeçalhos e rodapés sejam apresentados de forma síncrona com o carregamento inicial, evitando que os usuários precisem rolar para ver os separadores de terminal (Ibe993, b/174700218).

Correções de bugs

  • Correção de um vazamento de memória raro que acontece quando um PagingSource é invalidado antes que o PageFetcher possa começar a carregar a partir dele (I9606b, b/174625633).

Versão 3.0.0-alpha12

13 de janeiro de 2021

Lançamento de androidx.paging:paging-*:3.0.0-alpha12. A versão 3.0.0-alpha12 contém estas confirmações.

Mudanças na API

  • InvalidatePagingSourceFactory não é mais uma classe abstrata, porque nunca teve um método abstrato (I4a8c4).
  • Adição de uma sobrecarga de .cachedIn() que aceita ViewModel em vez de Lifecycle ou CoroutineScope para usuários Java (I97d81, b/175332619).
  • Permite que autores de chamada do Java usem operações de transformação do PagingData de forma assíncrona, aceitando um Executor em argumentos do operador de transformação. Agora, todos os operadores de transformação -Sync têm o sufixo -Sync removido, e os usuários da corrotina do Kotlin precisarão desambiguar chamando a função da extensão que aceita um bloco de suspensão. Todos os operadores de transformação do PagingData foram movidos para as extensões na classe estática PagingDataTransforms. Os usuários de Java precisarão chamá-los usando auxiliares estáticos, por exemplo, PagingDataTransforms.map(pagingData, transform). Para usuários do Kotlin, a sintaxe é a mesma, mas será necessário importar a função (If6885, b/172895919).

Correções de bugs

  • Correção de um bug em que o RemoteMediator.load() não era chamado durante adapter.refresh() se o final da paginação já tinha sido alcançado.

Versão 3.0.0-alpha11

16 de dezembro de 2020

Lançamento de androidx.paging:paging-*:3.0.0-alpha11. A versão 3.0.0-alpha11 contém estas confirmações.

Novos recursos

  • Adição de compatibilidade com o estado salvo para os seguintes casos de uso básicos (a compatibilidade completa, especialmente no caso de fonte em camadas, ainda está em desenvolvimento):
    • O fluxo é armazenado em cache e o aplicativo não é eliminado. Por exemplo, o fluxo é armazenado em um modelo de visualização e a atividade é recriada no processo.
    • A origem da paginação é contada, os marcadores são ativados e o layout não é escalonado.

Mudanças na API

  • PagingSource.getRefreshKey() agora é uma API estável (I22f6f, b/173530980).
  • PagingSource.invalidate não é mais uma função aberta. Se você precisar receber uma notificação quando ocorrer a invalidação, chame o método registerInvalidatedCallback em vez de modificar a invalidação (I628d9, b/173029013, b/137971356).
  • Pager agora tem um único construtor experimental junto aos construtores regulares, em vez de transformar APIs experimentais em uma API pública não experimental usando a anotação de permissão (I9dc61, b/174531520).
  • As propriedades de conveniência, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append foram atualizadas para fazer a transição de Loading para NotLoading somente depois que os estados de carregamento do mediador e da origem forem NotLoading para garantir que a atualização remota tenha sido aplicada (I65619).
  • LoadParams.pageSize foi removido (já estava suspenso). A recomendação é usar LoadParams.loadSize no PagingSource.

    O LoadParams.loadSize é sempre igual ao PagingConfig.pageSize, exceto para a chamada de carregamento inicial em que ele é igual ao PagingConfig.initialLoadSize.

    Se você estiver testando o Paging2 DataSource sem usar um Pager ou PagedList, o pageSize pode não corresponder ao PagingConfig.pageSize se você também estiver definindo initialLoadSize. Se isso for importante para seus testes, use um Pager/PagedList, que definirá internamente o PageSize correto para os métodos de carregamento do DataSource (I98ac7, b/149157296).

Correções de bugs

  • Correção de uma falha causada por IllegalStateException ao usar separadores com o PagingConfig.maxSize (I0ed33, b/174787528).
  • Correção de um bug em que o estado de carregamento de PREPEND / APPEND não atualizava para NotLoading(endOfPaginationReached = true) imediatamente após o carregamento inicial se o RemoteMediator estivesse definido (I8cf5a).
  • Correção de um bug em que APIs do apresentador, como .snapshot(), .peek() etc., retornavam a lista anterior (desatualizada) nas atualizações de ListUpdateCallback.
  • Correção de um bug em que os operadores de separadores não adicionavam cabeçalhos ou rodapés quando usados com o RemoteMediator.
  • Correção de um bug em que LoadState atualizava para NotLoading no RemoteMediator e travava no estado Loading
  • Correção de um bug em que a API de compatibilidade Paging2.0, .asPagingSourceFactory(), podia fazer com que o DataSource de apoio fosse inicializado no CoroutineDispatcher incorreto. Isso resolve uma falha e possíveis casos de ANR, especialmente quando se usa a implementação atual de PagingSource da Room, que usa esse caminho de compatibilidade.

Versão 3.0.0-alpha10

2 de dezembro de 2020

Lançamento de androidx.paging:paging-*:3.0.0-alpha10. A versão 3.0.0-alpha10 contém estas confirmações.

Mudanças na API

  • As APIs dataRefreshFlow e dataRefreshListener suspensas foram removidas porque são redundantes com relação às atualizações loadStateFlow / Listener. Para aqueles que estão migrando, o equivalente de loadStateFlow é:

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908).

Correções de bugs

  • endOfPaginationReached de REFRESH do RemoteMediator agora se propaga corretamente para as atualizações LoadState e impede o acionamento remoto de APPEND e PREPEND (I94a3f, b/155290248).
  • A apresentação de uma lista vazia devido à página inicial vazia ou à filtragem pesada não impedirá mais que Paging inicie carregamentos de PREPEND ou APPEND (I3e702, b/168169730).
  • Correção de um problema em que a getRefreshKey não era chamada nas gerações subsequentes do PagingSource quando as invalidações ocorriam rapidamente (I45460, b/170027530).

Contribuição externa

  • Uma nova classe abstrata InvalidatingPagingSourceFactory foi adicionada com uma API .invalidate() que encaminha a invalidação para todos os PagingSources que emite. Agradecemos a @claraf3 (Ie71fc, b/160716447).

Problemas conhecidos

  • Cabeçalhos e rodapés da transformação .insertSeparators() podem não aparecer imediatamente ao usar o RemoteMediator (b/172254056).
  • O uso de RemoteMediator pode fazer com que o LoadState remoto fique travado se a invalidação e PagingSource.load(LoadParams.Refresh(...)) forem concluídos antes de RemoteMediator.load() retornar (b/17371720).

Versão 3.0.0-alpha09

11 de novembro de 2020

androidx.paging:paging-*:3.0.0-alpha09 é lançado. A versão 3.0.0-alpha09 contém estas confirmações.

Mudanças na API

  • Suspensão total dos métodos dataRefreshFlow / Listener com uma cláusula replaceWith (I6e2dd).

Correções de bugs

  • Correção da geração de uma IllegalArgumentException ao usar separadores com RemoteMediator e do acionamento de uma invalidação enquanto um carregamento remoto que retorna endOfPagination ainda está em execução (I3a260).

Versão 3.0.0-alpha08

28 de outubro de 2020

androidx.paging:paging-*:3.0.0-alpha08 é lançado. A versão 3.0.0-alpha08 contém estas confirmações.

Mudanças na API

  • As variantes Kotlin / Java do DataSource.InvalidatedCallback foram combinadas pela ativação de conversões SAM no Kotlin pela interface funcional (disponível no Kotlin 1.4). Isso também corrige um bug em que a variante Kotlin dos callbacks de invalidação não era chamada depois de ser transformada por .map ou .mapByPage (I1f244, b/165313046).

Correções de bugs

  • A interação da Paging com ViewPager foi melhorada consideravelmente. Mais especificamente, a Paging não cancelará mais uma chamada RemoteMediator#load devido a uma invalidação de página. Ela também não fará mais uma solicitação anexa/precedente de carregamento, se REFRESH for necessário, até a solicitação REFRESH ser concluída (I6390b, b/162252536).
  • A verificação de lint da API para MissingGetterMatchingBuilder está ativada para androidx (I4bbea, b/138602561).
  • Correção de um bug em que os auxiliares .withLoadState* ConcatAdapter falhavam ao notificar o RecyclerView da linha de execução em segundo plano (I18bb5, b/170988309).
  • Correção de um bug em que o carregamento de uma página não vazia muito pequena às vezes impedia a pré-busca de acionar os carregamentos corretamente (Iffda3, b/1692459468).

Versão 3.0.0-alpha07

1º de outubro de 2020

androidx.paging:paging-*:3.0.0-alpha07 é lançado. A versão 3.0.0-alpha07 contém estas confirmações.

Mudanças na API

  • Os operadores assíncronos PagingData baseados em Guava agora aceitam um Executor como parâmetro para controlar o contexto de execução (Id4372).

Correções de bugs

  • Correção da exceção IndexOutOfBounds gerada no RemoteMediator devido a uma disputa (I00b7f, b/165821814).
  • Correção de uma disputa na conversão de DataSource para PagingSource, que fazia com que o PagingSource resultante ignorasse sinais de invalidação do DataSource.
  • Correção de um problema na lógica de busca de página, que às vezes não conseguia coletar novas gerações de PagingSource até que o PagingDataAdapter.refresh() fosse invocado.
  • Correção de um problema que fazia com que a posição de rolagem algumas vezes fosse perdida ao usar um DataSource convertido em PagingSource, como o produzido pela Room, em conjunto com RemoteMediator.

Contribuição externa

  • Agradecemos a @simonschiller por adicionar operadores de transformação assíncrona braseados em Guava, RxJava2 e RxJava3 para o PagingData.

Versão 3.0.0-alpha06

2 de setembro de 2020

androidx.paging:paging-*:3.0.0-alpha06 é lançado. A versão 3.0.0-alpha06 contém essas confirmações.

Mudanças na API

  • UnsupportedOperationException com mensagens mais claras sobre a falta de suporte para IDs estáveis é gerada sempre que PagingDataAdapter.setHasStableIds é chamado. Ib3890, b/158801427

Correções de bugs

  • O insertSeparators não filtra mais páginas vazias, permitindo que a distância de pré-busca seja respeitada pelo apresentador, mesmo nos casos em que muitas páginas vazias são inseridas. I9cff6, b/162538908

Versão 3.0.0-alpha05

19 de agosto de 2020

androidx.paging:paging-*:3.0.0-alpha05 é lançado. A versão 3.0.0-alpha05 contém essas confirmações.

Correções de bugs

  • Paging agora faz a pré-busca correta das páginas, mesmo quando os dados apresentados são muito filtrados.
  • O retorno de LoadResult.Error a uma carga repetida não faz mais com que os acessos ao item acionem incorretamente uma nova tentativa.

Contribuição externa

  • Agradecemos a Clara F por ajudar a limpar alguns testes. (549612).

Versão 3.0.0-alpha04

5 de agosto de 2020

androidx.paging:paging-*:3.0.0-alpha04 é lançado. A versão 3.0.0-alpha04 contém essas confirmações (link em inglês).

Mudanças na API

  • Adição da API peek() a AsyncPagingDataDiffer e PagingDataAdapter para permitir o acesso a dados apresentados sem acionar carregamentos de página (I38898, b/159104197).
  • Adição da API snapshot() a PagingDataAdapter e AsyncPagingDataDiffer para permitir a recuperação dos itens apresentados sem acionar a busca da página (I566b6, b/159104197).
  • Adição de um construtor PagingData.from(List<T>) para permitir a apresentação de listas estáticas, que podem ser combinadas com o fluxo geral de PagingData para mostrar listas estáticas em determinados estados, por exemplo, antes da conclusão de REFRESH inicial ou simplesmente para testar transformações (Id134d).
  • Suspensão do uso das APIs Flow / Listener de dataRefresh porque se destinavam a expor o estado de itens apresentados em REFRESH, mas com melhorias para o tempo de callback de Flow / Listener de loadState e, para a propriedade itemCount, é redundante (Ia19f3).
  • Adição de wrappers de compatibilidade RxJava3 para PagingSource e RemoteMediator (I49ef3, b/161480176).

Correções de bugs

  • PositionalDataSource convertido em PagingSource por meio do auxiliar toPagingSourceFactory, incluindo PagingSource gerado por Room agora se marca corretamente para dar suporte a saltos (I3e84c, b/162161201).
  • Correção de um bug em que o uso da variante síncrona de submitData às vezes levava a uma disputa, causando um ClosedSendChannelException (I4d702, b/160192222).

Contribuição externa

  • Agradecemos a Zac Sweers por adicionar wrappers de compatibilidade RxJava3 em nome do Slack (I49ef3, b/161480176).

Versão 3.0.0-alpha03

22 de julho de 2020

androidx.paging:paging-*:3.0.0-alpha03 é lançado. A versão 3.0.0-alpha03 contém essas confirmações (link em inglês).

Mudanças na API

  • O construtor do PagingState agora é público, o que facilitará as implementações de teste de getRefreshKey() (I8bf15).
  • No Java, variantes de função de mapa do Kotlin do DataSource são ocultas para resolver ambiguidades entre variantes originais e do Kotlin. (If7b23, b/161150011)
  • As APIs redundantes criadas como conveniências para usuários do Kotlin foram marcadas como @JvmSynthetic (I56ae5).
  • Adição de sobrecargas para o construtor da LoadResult.Page, que tem o padrão de itemsBefore e itemsAfter definido como COUNT_UNDEFINED (I47849).
  • Operadores PagingData existentes agora aceitam métodos de suspensão e introduzem novos operadores mapSync, flatMapSync e filterSync sem suspensão para usuários do Java. Os métodos de transformação existentes foram movidos para as funções de extensão. Por isso, agora os usuários do Kotlin precisarão importá-los. (I34239, b/159983232, links em inglês)

Correções de bugs

  • Agora, PagingSources da Room (e PositionalDataSource) exibirão um separador inicial como parte da primeira página. Assim, o usuário não precisará rolar para vê-lo (I6f747, b/160257628).
  • Os acessos a itens em marcadores agora acionam corretamente carregamentos PagingSource até que uma página que atenda ao índice solicitado seja preenchida depois de ser transformada pelo PagingData.filter() (I95625, b/15767619).
  • Correção de um bug em que, às vezes, a rolagem depois que PaginSource retorna um erro pode impedir que o PagingDataAdapter.retry() tente novamente (I1084f, b/160194384).
  • Correção de um problema em que os acessos a um item depois que uma página é suspensa podem não carregar páginas, embora o acesso estivesse dentro da prefetchDistance (Ie95ae, b/160038730).
  • A configuração do PagingConfig.maxSize não permite mais marcadores após um evento de suspensão (I2be29, b/159667766).

Versão 3.0.0-alpha02

24 de junho de 2020

androidx.paging:paging-*:3.0.0-alpha02 é lançado. A versão 3.0.0-alpha02 contém essas confirmações (link em inglês).

Mudanças na API

  • Adição de sobrecargas para o construtor de PagingConfig com valores padrão comuns (I39c50, b/158576040).
  • Adição de sobrecargas para construtores de PagingDataAdapter e AsyncPagingDataDiffer com valores padrão comuns (Ie91f5).
  • As APIs do adaptador, dataRefreshFlow e dataRefreshListener, agora passam um booleano para sinalizar se um PagingData está vazio (I6e37e, b/159054196).
  • Adição de APIs RxJava e Guava para RemoteMediator: RxRemoteMediator e ListenableFutureRemoteMediator.
  • Adição de auxiliares ao PagingState para acesso a itens comuns, como isEmpty() e firstItemOrNull() (I3b5b6, b/158892717).

Correções de bugs

  • Agora, o Pager verifica a reutilização do PagingSource na fábrica para evitar a reutilização acidental de PagingSources inválidos, o que gerou um erro pouco claro (I99809, b/15486430).
  • As falhas do RemoteMediator REFRESH não impedem mais o carregamento do PagingSource (I38b1b, b/158892717).
  • A versão sem suspensão de submitData não causa mais uma falha devido à coleta simultânea em vários PagingData quando chamada após a versão de suspensão de submitData (I26358, b/158048877).
  • Correção da exceção "Não é possível coletar duas vezes a partir do pager", que poderia ocorrer após a mudança da configuração (I58bcc, b/158784811).

Versão 3.0.0-alpha01

10 de junho de 2020

androidx.paging:paging-*:3.0.0-alpha01 é lançado. A versão 3.0.0-alpha01 contém essas confirmações (link em inglês).

A biblioteca Paging foi atualizada para a versão 3.0 para ativar vários novos recursos importantes.

Novos recursos da versão 3.0

Problemas conhecidos

  • Os javadocs da Paging 3 ainda não estão disponíveis. Enquanto isso, use os guias vinculados acima ou os documentos do Kotlin. (b/158614050, link em inglês)

Versão 2.1.2

Versão 2.1.2

18 de março de 2020

androidx.paging:paging:2.1.2 é lançado. A versão 2.1.2 contém essas confirmações contra a 2.1.0 (link em inglês).

Correções de bugs

  • Correção para IndexOutOfBoundsException em casos raros ao converter uma posição durante a invalidação.

Problema da versão

  • A versão 2.1.1 da Paging foi lançada incorretamente de uma ramificação configurada incorretamente, expondo APIs parcialmente implementadas e funcionalidades futuras de uma próxima versão.

  • A Paging 2.1.2 contém a correção de centralização de carga lançada originalmente na versão 2.1.1, mas desta vez escolhida corretamente na versão 2.1.0. É altamente recomendável fazer upgrade para essa versão, caso você esteja usando a versão 2.1.1 no momento.

Versão 2.1.1

Versão 2.1.1

18 de dezembro de 2019

androidx.paging:paging-*:2.1.1 é lançado. 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 da 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 da 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 da Paging 2.1.0-beta01 sem mudanças de 2.1.0-alpha01.

Versão 2.1.0-alpha01

12 de outubro de 2018

A Paging 2.1.0-alpha01 tem duas adições importantes: descarte 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).
  • 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).
  • 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).

Versão 2.0.0

Versão 2.0.0

1º de outubro de 2018

A Paging 2.0.0 foi lançada com uma única correção de bug.

Correções de bugs

  • Correção de uma falha que poderia ocorrer com a rolagem muito rápida usando PositionalDataSource e marcadores 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).
  • 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.

Dependências anteriores ao AndroidX

Para as seguintes versões da 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

A Paging 1.0.1 foi lançada com uma única correção de bug em runtime. É altamente recomendável usar a 1.0.1 por questão de estabilidade. A Paging RxJava2 1.0.1 também foi liberada e é idêntica à 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

RxJava2 Versão 1.0.0-rc1

16 de maio de 2018

A Paging 1.0.0-rc1 RxJava2 está progredindo para se tornar candidata a lançamento sem mudanças desde a versão Alfa inicial.

Versão 1.0.0

Versão 1.0.0-rc1

19 de abril de 2018 Candidata a lançamento da Paging

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

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

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

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

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

  • 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 privado.

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.

Versão 1.0.0-alpha7

21 de março de 2018

Lançamento da Paging 1.0.0-alpha7 junto com Lifecycles 1.1.1. Como a 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.

A Paging alpha7 está sendo planejada 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, una 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).
  • 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

  • Builders foram alterados para serem finais (b/70848565).
  • A implementação de DataSource da Room agora foi corrigida para processar 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 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 amostra Javadoc b/70411933, b/71467637.