Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Paging

Guia do usuário  Exemplo de código (link em inglês)  Codelab
A biblioteca Paging facilita o carregamento gradual e tranquilo de dados na RecyclerView do seu app.

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

Artefato Versão estável Candidata a lançamento Versão Beta Versão Alfa
paging-* 3.1.1 - - 3.2.0-alpha03
paging-compose - - - 1.0.0-alpha17
Última atualização desta biblioteca: 24 de outubro de 2022

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:

Groovy

dependencies {
  def paging_version = "3.1.1"

  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"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:1.0.0-alpha17"
}

Kotlin

dependencies {
  val paging_version = "3.1.1"

  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")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:1.0.0-alpha17")
}

Para 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 build.

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 3.2

Versão 3.2.0-alpha03

24 de outubro de 2022

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

Teste de Paging

Esta versão contém um novo artefato: paging-testing. Esse artefato fornece APIs projetadas para testar unidades em cada camada do app e a integração dele à Paging de forma isolada.

Por exemplo, esta primeira versão inclui uma classe TestPager que permite validar o comportamento da sua própria implementação de PagingSource personalizada independente de Pager e da IU real, de que você normalmente precisaria para simular a integração completa de Paging.

TestPager deve ser considerado falso - um teste duplo que reflita a implementação real de Pager fornecendo uma superfície de API simplificada para testar uma PagingSource. São APIs suspend e precisam ser executadas em runTest, conforme descrito no guia Como testar corrotinas do Kotlin no Android.

Um exemplo dessas APIs em uso pode ser encontrado nos testes de room-paging, que foram refatorados para usar TestPager.

Mudanças na API

  • Oferece iteração conveniente em LoadResult.Page.data por LoadResult.Page.iterator(). Isso permite indiretamente o uso do método flatten da biblioteca padrão de Kotlin (link em inglês) quando recebe uma List<LoadResult.Page>, como a propriedade pages do PagingState que é transmitida para o método PagingSource.getRefreshKey. (Ie0718).

Versão 3.2.0-alpha02

10 de agosto de 2022

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

Novos recursos

  • A Paging agora apresenta logs usando as classes AsyncPagingDataDiffer ou PagingDataAdapter para expor informações de depuração coletadas de PagingData.
  • Os logs podem ser ativados com o comando adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159).

Correções de bugs

  • Correção da falta do construtor PagingDataDiffer ao usar paging-common:3.2.0-alpha01 no ambiente de execução paging-runtime:3.1.1 ou em versões mais antigas (b/235256201).

Versão 3.2.0-alpha01

1º de junho de 2022

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

Mudanças na API

  • Adição de construtores para PagingDataAdapter e AsyncPagingDataDiffer, que aceitam CoroutineContext em vez de CoroutineDispatcher (Idc878).
  • Por padrão, PagingData.from() e PagingData.empty() não vão mais afetar o construtor CombinedLoadStates no apresentador. Uma nova sobrecarga que permite transmitir sourceLoadStates e remoteLoadStates a esses construtores foi adicionada para manter o comportamento da configuração de LoadStates e ser totalmente terminal (ou seja, NotLoading(endOfPaginationReached = false)), com a opção de também incluir estados remotos, se necessário. Caso a classe LoadStates não seja transmitida, o CombinedLoadStates anterior será mantido no lado do apresentador quando receber a PagingData estática (Ic3ce5, b/205344028).

Correções de bugs

  • Agora, temos a priorização do resultado de PagingSource.getRefreshKey() em vez de um elemento initialKey nos casos em que ele retornaria nulo, mas um initialKey não nulo foi definido. (Ic9542, b/230391606).

Contribuição externa

  • Atualização da API :compose:ui-ui-test (updateApi) devido à migração de test-coroutines-lib (I3366d).

Versão 3.1

Versão 3.1.1

9 de março de 2022

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

Correções de bugs

  • Eventos LoadState.NotLoading intermediários entre gerações inseridos incorretamente por .cachedIn() foram removidos. Essa mudança facilita muito a reação a mudanças no LoadState, removendo eventos LoadState.NotLoading redundantes que foram produzidos entre novas tentativas de carregamentos com falha, durante a atualização ou durante a invalidação.

Versão 3.1.0

17 de novembro de 2021

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

Mudanças importantes desde a versão 3.0.0

  • As APIs Flow<PagingData>.observable e Flow<PagingData>.flowable não são mais experimentais.
  • Mudanças de comportamento para LoadState:
    • endOfPaginationReached agora é sempre false para LoadType.REFRESH em PagingSource e RemoteMediator.
    • Os LoadStates da Paging agora aguardam valores válidos de PagingSource e RemoteMediator antes de emitir downstream. Agora, novas gerações de PagingData sempre começarão corretamente com Loading (carregando) para o estado de atualização, em vez de redefinir para NotLoading (não carregando) incorretamente em alguns casos.
    • Os .loadStateFlow e .addLoadStateListener nas APIs de apresentador não enviam mais um CombinedLoadStates redundante inicial que sempre tenha estados de mediador definidos como null.
  • O cancelamento em gerações anteriores agora acontece normalmente em caso de invalidação / novas gerações. Não é mais necessário usar .collectLatest em Flow<PagingData>, embora ainda seja recomendado fazer isso.
  • O PagingSource.LoadResult.Invalid foi adicionado como um novo tipo de retorno de PagingSource.load, o que faz com que a Paging descarte qualquer solicitação de carregamento pendente ou futura para esse PagingSource e a invalide. Esse tipo de retorno foi projetado para processar dados potencialmente inválidos ou desatualizados que podem ser retornados do banco de dados ou da rede.
  • As APIs de apresentadores .onPagesPresented e .addOnPagesUpdatedListener, acionadas de forma síncrona conforme as páginas são apresentadas na IU, foram adicionadas. As atualizações de página podem acontecer nestes cenários:
    • O carregamento inicial de uma nova geração de PagingData será concluído, independente da nova geração incluir ou não mudanças nos itens apresentados, por exemplo: uma nova geração que conclui o carregamento inicial sem atualizações porque a lista é exatamente a mesma e ainda acionará esse callback.
    • Uma página é inserida, mesmo que ela não contenha novos itens.
    • Uma página é descartada, mesmo que esteja vazia.

Versão 3.1.0-rc01

3 novembro de 2021

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

Correções de bugs

  • Foram corrigidos um vazamento de memória e uma disputa em .cachedIn() nos casos em que vários eventos de carregamento eram enviados downstream pela Paging sem observadores ou entre a mudança de um observador para um novo PagingData (Ib682e).

Versão 3.1.0-beta01

13 de outubro de 2021

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

Correções de bugs

  • Foi corrigido um problema em que muitos acessos rápidos a itens podiam descartá-los para consideração na prefetchDistance, fazendo com que os carregamentos de página parassem. Isso é um problema principalmente quando muitos itens são dispostos de uma só vez em uma ordem que prioriza o carregamento em relação à direção de rolagem do usuário. Agora, esses acessos a itens são armazenados em buffer e priorizados de maneira síncrona para evitar que sejam descartados (aosp/1833273).

Versão 3.1.0-alpha04

29 de setembro de 2021

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

Mudanças na API

  • As APIs Flow<PagingData>.observable e Flow<PagingData>.flowable não são mais experimentais (Ie0bdd).

Correções de bugs

  • Para LoadStates, o endOfPaginationReached agora é sempre false para LoadType.REFRESH. Antes, era possível que o elemento endOfPaginationReached fosse true para o RemoteMediator REFRESH, mas não para a PagingSource. Esse comportamento agora foi consolidado para sempre retornar false, porque nunca faz sentido que REFRESH seja final, e está documentado como parte do contrato da API em LoadStates. Ao decidir se a paginação será encerrada, faça isso sempre com relação às direções APPEND ou PREPEND (I047b6).
  • Agora, os LoadStates da Paging aguardam valores válidos da PagingSource e do RemoteMediator antes de emitir um downstream entre gerações. Isso evita que novas gerações de PagingData enviem NotLoading (não carregando) em CombinedLoadStates.source.refresh, se ele já estiver no estado Loading (carregando). Agora, as novas gerações de PagingData sempre começam corretamente com o estado Loading para o estado da atualização, em vez de serem redefinidos como NotLoading incorretamente em alguns casos.

    O cancelamento em gerações anteriores agora acontece normalmente em caso de invalidação / novas gerações. Não é mais necessário usar o método .collectLatest em Flow<PagingData>, embora ainda seja altamente recomendável fazer isso. (I0b2b5, b/177351336, b/195028524).

  • Os métodos .loadStateFlow e .addLoadStateListener nas APIs do apresentador não enviam mais um CombinedLoadStates redundante inicial que sempre tenha estados de mediador definidos como null e os estados de origem definidos como NotLoading(endOfPaginationReached = false). O que isso significa:

    1. Os estados do mediador serão sempre preenchidos se você usar o RemoteMediator.
    2. Registrar um novo listener loadState ou um novo coletor em .loadStateFlow não emitirá mais o valor atual imediatamente se ele não tiver recebido CombinedLoadStates reais de PagingData. Isso pode acontecer se um coletor ou listener for iniciado antes do envio de PagingData (I1a748).

Versão 3.1.0-alpha03

21 de julho de 2021

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

Mudanças na API

  • Um terceiro tipo de retorno LoadResult, LoadResult.Invalid, foi adicionado à PagingSource. Quando PagingSource.load retorna LoadResult.Invalid, a Paging descartará os dados carregados e invalidará a PagingSource. Esse tipo de retorno foi projetado para processar dados potencialmente inválidos ou desatualizados que podem ser retornados do banco de dados ou da rede.

    Por exemplo, se uma entrada for gravada no banco de dados subjacente, mas a PagingSource não invalidá-la a tempo, é possível que os resultados retornados sejam inconsistentes caso a implementação dependa da imutabilidade do conjunto de dados de apoio responsáveis pelo carregamento (por exemplo, implementações dB do estilo LIMIT OFFSET). Nesse caso, é recomendável conferir se há alguma invalidação após o carregamento e retornar LoadResult.Invalid, que faz com que a Paging descarte todas as solicitações de carregamento pendentes ou futuras para essa PagingSource e as invalide.

    Esse tipo de retorno também tem suporte da API Paging2 que usa LivePagedList ou RxPagedList. Ao usar uma PagingSource com as APIs PagedList da Paging2, a PagedList é removida imediatamente, interrompendo outras tentativas de carregar dados nessa PagedList, e aciona a invalidação da PagingSource.

    LoadResult é uma classe selada, o que significa que essa é uma mudança incompatível com a origem, de modo que os casos de uso que usam diretamente resultados de PagingSource.load terão que processar LoadResult.Invalid durante a compilação. Por exemplo, os usuários do Kotlin que usam exhaustive-when para verificar o tipo de retorno terão que adicionar uma verificação de tipo inválido (Id6bd3, b/191806126, b/192013267).

Correções de bugs

  • Os callbacks de invalidação adicionados pelo PagingSource.registerInvalidatedCallback ou DataSource.addInvalidatedCallback agora são acionados automaticamente se estiverem registrados em uma PagingSource / DataSource já inválida. Isso resolve uma disputa que fazia com que a Paging descartasse sinais de invalidação e ficasse travada quando recebia uma origem que já era inválida no carregamento inicial. Além disso, agora os callbacks de invalidação são removidos corretamente após serem acionados, já que têm a garantia de serem chamados no máximo uma vez (I27e69).
  • O envio do valor inicial do marcador de posição (InitialPagedList) de um fluxo PagedList recém-instanciado, por exemplo, LivePagedListBuilder ou RxPagedListBuilder, não apagará mais os dados carregados anteriormente.

Versão 3.1.0-alpha02

1º de julho de 2021

Lançamento da versão androidx.paging:paging-*:3.1.0-alpha02. A versão 3.1.0-alpha02 contém estas confirmações.

Novos recursos

  • Adição das APIs onPagesPresented e do observador de fluxo, que são acionadas imediatamente após a atualização das páginas apresentadas na IU.

    Como essas atualizações são síncronas com a IU, você pode chamar métodos do adaptador, como .snapshot, .getItemCount, para inspecionar o estado após a atualização ser aplicada. Observe que .snapshot() foi chamado explicitamente porque pode ser dispendioso a cada atualização.

    As atualizações de página podem acontecer nos seguintes cenários:

    • O carregamento inicial de uma nova geração de PagingData será concluído, independente da nova geração incluir ou não mudanças nos itens apresentados, como: Uma nova geração que conclui o carregamento inicial sem atualizações porque a lista é exatamente a mesma e ainda acionará esse retorno de chamada.
    • Uma página é inserida, mesmo que ela não contenha novos itens.
    • Uma página é descartada, mesmo que ela esteja vazia (I272c9, b/189999634).

Correções de bugs

  • O acesso a PagedList.dataSource a partir do valor inicial produzido por LivePagedList ou RxPagedList não gerará mais uma IllegalStateException (I96707).

Versão 3.1.0-alpha01

2 de junho de 2021

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

Mudanças na API

  • As classes fornecidas por paging-rxjava3 agora estão no pacote androidx.paging.rxjava3 para que não entrem em conflito com paging-rxjava2 (Ifa7f6).

Correções de bugs

  • Foi corrigido um problema em que a Paging às vezes enviava eventos diferentes do ambiente autônomo para a RecyclerView, o que fazia com que determinados listeners fossem acionados antecipadamente (Ic507f, b/182510751).

Contribuição externa

  • Foram adicionadas APIs PagedList compat descontinuadas ao artefato rxjava3 (Id1ce2, b/182497591).

Paging Compose: versão 1.0.0

Versão 1.0.0-alpha17

24 de outubro de 2022

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

Novos recursos

Versão 1.0.0-alpha16

10 de agosto de 2022

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

Novos recursos

  • A Paging agora apresenta logs usando a classe LazyPagingItems para expor informações de depuração coletadas de PagingData.
  • Os logs podem ser ativados com o comando adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE] ([b/235527159}(https://issuetracker.google.com/issues/235527159)).

Correções de bugs

  • Correção da falta do construtor PagingDataDiffer ao usar paging-compose:1.0.0-alpha15 no paging-common:3.1.1 ou em versões anteriores (b/235256201,b/239868768).

Versão 1.0.0-alpha15

1º de junho de 2022

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

Mudanças na API

  • Adição de construtores para PagingDataAdapter e AsyncPagingDataDiffer, que aceitam CoroutineContext em vez de CoroutineDispatcher (Idc878).

Correções de bugs

  • A classe LazyPagingItems agora define o loadState inicial para ter uma atualização de LoadState.Loading (I55043, b/224855902).

Versão 1.0.0-alpha14

13 de outubro de 2021

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

Versão 1.0.0-alpha13

29 de setembro de 2021

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

Mudanças na API

  • A função LazyPagingItems.snapshot() foi substituída pela propriedade LazyPagingItems.itemSnapshotList (Ie2da8).
  • O LazyPagingItems.getAsState() descontinuado foi removido (Ie65e4).

Versão 1.0.0-alpha12

21 de julho de 2021

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

Mudanças na API

  • Os métodos items(lazyPagingItems) e itemsIndexed(lazyPagingItems) usados para conectar a Paging à LazyColumn/Row agora aceitam o parâmetro de chave de opção que permite especificar uma chave estável que represente o item. Leia mais sobre chaves neste link (I7986d).
  • A função lazyPagingItems.getAsState(index) foi descontinuada. Use lazyPagingItems[index] (I086cb, b/187339372).

Versão 1.0.0-alpha11

30 de junho de 2021

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

Versão 1.0.0-alpha10

2 de junho de 2021

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

Versão 1.0.0-alpha09

18 de maio de 2021

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

Correções de bugs

  • Agora, o itemCount e o getter de item de LazyPagingItems são observáveis, o que possibilita que ele também seja usado com LazyVerticalGrid. (Ie2446, b/171872064, b/168285687).

Compatibilidade do Compose

  • androidx.paging:paging-compose:1.0.0-alpha09 só é compatível com o Compose 1.0.0-beta07 e versões mais recentes.

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 estas 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 estas confirmações.

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

Versão 3.0.1

21 de julho de 2021

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

Correções de bugs

  • Acessar a PagedList.dataSource do valor inicial produzido pela LivePagedList ou RxPagedList não gerará mais uma IllegalStateException (I96707).

Versão 3.0.0

Versão 3.0.0

5 de maio de 2021

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

Principais recursos da versão 3.0.0

A maioria das APIs da Paging 2.x.x foram descontinuadas e substituídas pelas novas APIs da Paging 3, proporcionando as seguintes melhorias:

  • Compatibilidade de primeira classe para corrotinas e fluxo do Kotlin
  • Suporte para cancelamento
  • Estado de carregamento e sinais de erro integrados
  • Funcionalidade de nova tentativa e atualização
  • As três subclasses do DataSource foram combinadas em uma classe PagingSource unificada
  • Transformações de páginas personalizadas, incluindo uma integrada para a adição de separadores
  • Carregamento de cabeçalhos e rodapés de estado

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

  • Foi corrigido um problema em que a Paging às vezes enviava eventos diferentes do ambiente autônomo para a 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

  • Foram aplicadas restrições ao uso público de APIs experimentais (I6aa29, b/174531520).
  • Foi corrigido 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

  • Foi corrigida a 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 as classes PagingSource e 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 mostrar 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 a 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

  • Foi corrigido um vazamento de memória raro que acontece quando uma PagingSource é invalidada antes que o PageFetcher possa iniciar o carregamento com ela (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

  • Foi corrigido um bug em que o RemoteMediator.load() não era chamado durante adapter.refresh() se o final da paginação já tivesse 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

  • Foi adicionado suporte ao estado salvo para os casos de uso básicos abaixo. O suporte completo, 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 normais, 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 na 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 a DataSource da Pagin2 sem usar um Pager ou uma 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 da 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).
  • Foi corrigido 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).
  • Foi corrigido um bug em que APIs do apresentador, como .snapshot(), .peek() etc., retornavam a lista anterior (desatualizada) nas atualizações de ListUpdateCallback.
  • Foi corrigido um bug em que os operadores de separadores não adicionavam cabeçalhos ou rodapés quando usados com o RemoteMediator.
  • Foi corrigido um bug em que o LoadState atualizava para NotLoading no RemoteMediator e travava no estado Loading
  • Foi corrigido 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 da PagingSource do 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 descontinuadas foram removidas, porque são redundantes com as atualizações do 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 a uma página inicial vazia ou à filtragem pesada não impedirá mais que Paging inicie carregamentos de PREPEND ou APPEND (I3e702, b/168169730).
  • Foi corrigido um problema em que a função getRefreshKey não era chamada nas gerações subsequentes da 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 todas as 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/173717820).

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

  • Foi corrigida a IllegalArgumentException que era gerada ao usar separadores com RemoteMediator e uma invalidação que era acionada 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).
  • Foi corrigido um bug em que os auxiliares .withLoadState* ConcatAdapter falhavam ao notificar a RecyclerView da linha de execução em segundo plano (I18bb5, b/170988309).
  • Foi corrigido 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/169259468).

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).
  • Foi corrigida uma disputa na conversão da DataSource para PagingSource, que fazia com que a PagingSource resultante ignorasse sinais de invalidação de DataSource.
  • Foi corrigido um problema na lógica de busca de página, que às vezes não conseguia coletar novas gerações da PagingSource até que o PagingDataAdapter.refresh() fosse invocado.
  • Foi corrigido 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 pelo Room, em conjunto com o 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.
  • Retornar LoadResult.Error para um carregamento repetido 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

  • A API peek() foi adicionada a AsyncPagingDataDiffer e PagingDataAdapter para permitir o acesso a dados apresentados sem acionar carregamentos de página (I38898, b/159104197).
  • A API snapshot() foi adicionada a PagingDataAdapter e AsyncPagingDataDiffer para permitir a extração dos itens apresentados sem acionar a busca da página (I566b6, b/159104197).
  • Foi adicionado 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 do REFRESH inicial ou simplesmente para testar transformações (Id134d).
  • Descontinuaçã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, se tornaram redundantes (Ia19f3).
  • Foram adicionados wrappers de compatibilidade RxJava3 para PagingSource e RemoteMediator (I49ef3, b/161480176).

Correções de bugs

  • A PositionalDataSource convertida em PagingSource pelo auxiliar toPagingSourceFactory, incluindo a PagingSource gerado pelo Room agora se marca corretamente para oferecer 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).
  • Foram adicionadas sobrecargas para o construtor 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 (e PositionalDataSource) do Room vão mostrar um separador inicial como parte da primeira página. Assim, o usuário não vai precisar rolar para que ele apareça (I6f747, b/160257628).
  • Os acessos a itens em marcadores de posição agora acionam corretamente carregamentos de PagingSource até que seja retornada uma página que atenda ao índice solicitado depois de ser transformada pelo PagingData.filter() (I95625, b/158763195).
  • Foi corrigido um bug em que, às vezes, rolar depois que a PagingSource retorna um erro podia impedir que o método PagingDataAdapter.retry() tentasse novamente (I1084f, b/160194384).
  • Foi corrigido 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

  • Foram adicionadas sobrecargas para o construtor de PagingConfig com valores padrão comuns (I39c50, b/158576040).
  • Foram adicionadas sobrecargas para construtores de PagingDataAdapter e AsyncPagingDataDiffer com valores padrão comuns (Ie91f5).
  • As APIs do adaptador, dataRefreshFlow e dataRefreshListener, agora transmitem um booleano para sinalizar se um PagingData está vazio (I6e37e, b/159054196).
  • Foram adicionadas APIs RxJava e Guava para o RemoteMediator: RxRemoteMediator e ListenableFutureRemoteMediator.
  • Foram adicionados 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 da PagingSource na fábrica para evitar a reutilização acidental de PagingSources inválidas, o que gerava um erro pouco claro (I99809, b/158486430).
  • As falhas de RemoteMediator REFRESH não impedem mais o carregamento da 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).
  • Foi corrigida a 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.1.1 contém estas confirmações.

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.
  • Foi adicionado o AsyncPagedListDiffer.addPagedListListener() para detectar quando a PagedList foi trocada (b/111698609).
  • Foi adicionada a variante PagedListAdapter.onCurrentListChanged(), que transmite a lista antiga e a nova. A variante anterior foi descontinuada.
  • Foram adicionadas variantes PagedListAdapter/AsyncPagedListDiffer.submitList() que recebem um callback extra que é acionado se/quando a pagedlist é mostrada, 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

  • Foi corrigida 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.
  • Foi corrigido 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

  • Foi corrigida 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

  • O conteúdo ausente em alguns casos de prefixo (marcadores de posição desativados, PositionalDataSource) foi corrigido (b/80149146).
  • Já lançado em 1.0.1. Falhas em que PagedListAdapter e AsyncPagedListDiffer não sinalizavam eventos de movimentação foram corrigidas 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

  • O RxPagedListBuilder foi adicionado com o novo artefato android.arch.paging:rxjava2.

Mudanças na API

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

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

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

  • O membro PagedList.mCallbacks foi corrigido 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.

  • Foi corrigido o 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 unir o 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 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 de conveniência (b/72611341).
  • Todas as classes descontinuadas foram removidas da API, incluindo os elementos remanescentes do pacote recyclerview.extensions e o LivePagedListProvider.
  • DataSource.Factory foi modificada 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 do Room agora foi corrigida para processar consultas de várias tabelas. Essa correção está presente no Room 1.1.0-beta1, confira acima.
  • Foi corrigido 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).
  • Foram criados mais registros para rastrear o bug IllegalArgumentException b/70360195 (e suposta correção do lado do Room).
  • Correções de código de amostra Javadoc b/70411933, b/71467637.