Paging
Esta tabela lista todos os artefatos no grupo androidx.paging
.
Artefato | Versão estável | Versão candidata a lançamento | Versão Beta | Versão Alfa |
---|---|---|---|---|
paging-* | 3.3.5 | - | - | - |
paging-compose | 3.3.5 | - | - | - |
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.3.2" 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:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" 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:3.3.2") }
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.
Consulte a documentação do Issue Tracker para saber mais.
Versão 3.3
Versão 3.3.5
11 de dezembro de 2024
Lançamento de androidx.paging:paging-*:3.3.5
. A versão 3.3.5 contém estas confirmações.
Correções de bugs
- Correção do bug em que
RecyclerView
geraIndexOutOfBoundsException
quando o usuário rola a tela enquanto atualizaRecyclerView
(Id1f16, b/381024738).
Versão 3.3.4
13 de novembro de 2024
Lançamento de androidx.paging:paging-*:3.3.4
. A versão 3.3.4 contém estas confirmações.
Correções de bugs
- Os testes de unidade do Android que puxam a paginação 3.3 ou mais recente não vão mais gerar um erro como
Method isLoggable in android.util.Log not mocked
. (Ia9400, b/331684448).
Versão 3.3.2
7 de agosto de 2024
Lançamento de androidx.paging:paging-*:3.3.2
. A versão 3.3.2 contém estas confirmações.
Novos recursos
paging-common
epaging-testing
adicionaram novos destinos do Kotlin Multiplatform:watchos
,tvos
elinuxArm64
(90c9768), (53e0eca).
Versão 3.3.1
24 de julho de 2024
Lançamento de androidx.paging:paging-*:3.3.1
. A versão 3.3.1 contém estas confirmações.
Correções de bugs
- Correção de um problema em que o
AsyncPagingDataDiffer
ou as APIs criadas com base nele, como oPagingDataAdapter
usado comRecyclerView
, não conseguiam acionar mais cargas quando a fonte de dados de suporte era atualizada durante a rolagem. (I60ca5, b/352586078). - Correção de uma falha que ocorre quando os itens são removidos da fonte de dados de suporte durante a rolagem de um
RecyclerView
usando umPagingDataAdapter
ouAsyncPagingDataDiffer
(I8c65a, b/347649763).
Versão 3.3.0
14 de maio de 2024
Lançamento de androidx.paging:paging-*:3.3.0
. A versão 3.3.0 contém estas confirmações.
Mudanças importantes desde a versão 3.2.0
PagingDataPresenter
agora é uma classe pública. Agora, é possível criar apresentadores multiplataforma com base emPagingDataPresenter
, em vez de exigir APIs de paginação internas ouAsyncPagingDataDiffer
depaging-runtime
.- Foram adicionados novos métodos auxiliares
LoadStates
eCombinedLoadStates
emhasError
eisIdle
para verificar seLoadStates
está no estado de erro ouNotLoading
, respectivamente. Também foi adicionado um novo método de extensão KotlinawaitNotLoading()
emFlow<CombinedLoadStates>
que aguarda até que uma carga seja resolvida no estadoNotLoading
ou de erro. PagingData.empty()
agora envia estadosNotLoading
por padrão, a menos queLoadStates
personalizados sejam transmitidos para o construtor Isso se afasta do comportamento atual, em que não são enviadosLoadStates
quando enviados para umPagingDataAdapter
ou são enviados estados de carregamento quando coletados comoLazyPagingItems
. Quando coletado comoLazyPagingItems
, ele também vai mostrar uma lista vazia imediatamente após a composição inicial.
Compatibilidade com o Kotlin Multiplatform
A paginação agora envia artefatos compatíveis com o Kotlin Multiplatform, graças em grande parte ao trabalho upstream do projeto multiplatform-paging do CashApp.
- O
paging-common
moveu todas as APIs Paging 3 paracommon
e agora é compatível com jvm e iOS, além do Android. - O
paging-testing
mudou o código paracommon
e agora é compatível com jvm e iOS, além do Android. - O
paging-compose
moveu o código paracommon
e envia um artefato do Android, correspondendo ao suporte multiplataforma doandroidx.compose
. paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
vão continuar sendo exclusivos do Android.
Versão 3.3.0-rc01
1º de maio de 2024
Lançamento do androidx.paging:paging-*:3.3.0-rc01
sem mudanças na Paging 3.3.0-beta01. A versão 3.3.0-rc01 contém estas confirmações.
Versão 3.3.0-beta01
3 de abril de 2024
Lançamento de androidx.paging:paging-*:3.3.0-beta01
sem mudanças importantes. A versão 3.3.0-beta01 contém estas confirmações.
Versão 3.3.0-alpha05
20 de março de 2024
Lançamento de androidx.paging:paging-*:3.3.0-alpha05
. A versão 3.3.0-alpha05 contém estas confirmações.
Mudanças na API
- A paginação agora usa a anotação
@MainThread
do AndroidX para código comum. (I78f0d, b/327682438).
Versão 3.3.0-alpha04
6 de março de 2024
Lançamento de androidx.paging:paging-*:3.3.0-alpha04
. A versão 3.3.0-alpha04 contém estas confirmações.
Correções de bugs
- Correção de pequenos erros de documentação relacionados à adição da compatibilidade multiplataforma do Kotlin. (aosp/2950785).
Versão 3.3.0-alpha03
7 de fevereiro de 2024
Lançamento de androidx.paging:paging-*:3.3.0-alpha03
. A versão 3.3.0-alpha03 contém estas confirmações.
Novos recursos
PagingDataPresenter
agora é uma classe pública. Agora, é possível criar apresentadores multiplataforma com base emPagingDataPresenter
, em vez de exigir APIs de paginação internas ouAsyncPagingDataDiffer
depaging-runtime
. (Id1f74, b/315214786).- Foram adicionados novos métodos auxiliares
LoadStates
eCombinedLoadStates
para verificar seLoadStates
está no estado de erro ouNotLoading
. Também foi adicionada uma nova API que aguarda umaLoadStateFlow
até que uma carga seja resolvida no estadoNotLoading
ou de erro. (Id6c67).
Mudança de comportamento
PagingData.empty()
agora envia estadosNotLoading
por padrão, a menos queLoadStates
personalizados sejam transmitidos para o construtor Isso se afasta do comportamento atual, em que não são enviadosLoadStates
quando enviados para umPagingDataAdapter
ou são enviados estados de carregamento quando coletados comoLazyPagingItems
. Quando coletado comoLazyPagingItems
, ele também vai mostrar uma lista vazia imediatamente após a composição inicial. (I4d11d, b/301833847).
Versão 3.3.0-alpha02
20 de setembro de 2023
Lançamento de androidx.paging:paging-*:3.3.0-alpha02
. A versão 3.3.0-alpha02 contém estas confirmações.
Compatibilidade com o Kotlin Multiplatform
A paginação agora envia artefatos compatíveis com o Kotlin Multiplatform, graças em grande parte ao trabalho upstream do projeto multiplatform-paging do CashApp. Isso nos permite evitar divergências entre dois repositórios e manter a compatibilidade entre eles.
- O
paging-common
moveu todas as APIs Paging 3 paracommon
e agora é compatível com jvm e iOS, além do Android. - O
paging-testing
mudou o código paracommon
e agora é compatível com jvm e iOS, além do Android. - O
paging-compose
moveu o código paracommon
e envia um artefato do Android, correspondendo ao suporte multiplataforma doandroidx.compose
. paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
vão continuar sendo exclusivos para Android.
Mudanças na API
- A interface Logger pública, que era destinada apenas ao uso interno, foi descontinuada (I16e95, b/288623117).
Contribuição externa
- Agradecemos a veyndan da Cash App por ajudar a mover a paginação para a Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609).
Versão 3.3.0-alpha01
20 de setembro de 2023
- Esta é a primeira versão multiplataforma das bibliotecas androidx.paging. Esta versão tem apenas artefatos
*-jvm
e*-android
. Para variantes do macOS, iOS e Linux, use3.3.0-alpha02
.
Versão 3.2
Versão 3.2.1
6 de setembro de 2023
Lançamento de androidx.paging:paging-*:3.2.1
. A versão 3.2.1 contém estas confirmações.
Correções de bugs
- Correção de um problema em que a API
asSnapshot()
do artefato de teste de paginação travava quando um fluxo criado comPagingData.from(List)
era transmitido, já queasSnapshot()
não tinha informações sobre quando o carregamento foi concluído (diferente da sobrecargaPagingData.from(List, LoadStates)
). Essa solução alternativa só funciona para fluxos completáveis (por exemplo, umflowOf(PagingData.from(...))
). Para fluxos não completáveis (por exemplo,MutableStateFlow
, use a sobrecargaPagingData.from
que forneceLoadStates
. (I502c3). - O Compose de paginação agora usa
AndroidUiDispatcher.Main
internamente para garantir que novos dados estejam disponíveis no mesmo frame em que o carregamento é concluído. (Ia55af).
Versão 3.2.0
26 de julho de 2023
Lançamento de androidx.paging:paging-*:3.2.0
. A versão 3.2.0 contém estas confirmações.
Mudanças importantes desde a versão 3.1.0
- O Paging Compose alcançou a estabilidade da API e foi mesclada de volta ao restante do Paging, em que a versão agora corresponde a todos os outros artefatos do Paging. Estas são as mudanças desde a versão 3.1.0:
- Suporte para visualizar uma lista de dados falsos criando uma
PagingData.from(fakeData)
e envolvendo essaPagingData
em umaMutableStateFlow
(por exemplo,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Transmita esse fluxo para elementos combináveis@Preview
como receptor para quecollectAsLazyPagingItems()
seja visualizado. - Suporte a todos os layouts preguiçosos, como
LazyVerticalGrid
eHorizontalPager
, além de componentes preguiçosos personalizados das bibliotecas do Wear e da TV. Isso foi feito com novos métodos de extensãoLazyPagingItems
de nível mais baixoitemKey
eitemContentType
, que ajudam a implementar os parâmetroskey
econtentType
nas APIsitems
padrão que já existem paraLazyColumn
,LazyVerticalGrid
e seus equivalentes em APIs comoHorizontalPager
. items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
, que oferecem suporte apenas aLazyListScope
, foram descontinuados.
- Suporte para visualizar uma lista de dados falsos criando uma
- Novo artefato
paging-testing
, que fornece APIs projetadas para testar unidades em cada camada do app e a integração dele à Paging de forma isolada. Por exemplo, ele inclui- Classe
TestPager
que permite validar o comportamento da sua própria implementação dePagingSource
personalizada independente do Pager e da IU real. - APIs
asPagingSourceFactory
para transformar umFlow<List<Value>>
ou umList<Value>
estático em umPagingSourceFactory
que pode ser transmitido a um Pager nos testes - Extensão
asSnapshot
do Kotlin emFlow<PagingData<Value>>
, que converte oFlow<PagingData<Value>>
em umList<Value>
direto. OasSnapshot lambda
permite imitar a interface do app usando APIs comoscrollTo
ouappendScrollWhile
. Assim, você pode verificar se o snapshot dos dados está correto a qualquer momento no conjunto de dados paginados.
- Classe
- Foram adicionados registros padrão para expor informações de depuração de paginação em dois níveis:
VERBOSE
eDEBUG
. Os logs podem ser ativados com o comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Isso se aplica à paginação com Views ou Compose. - Adição de construtores para
PagingDataAdapter
eAsyncPagingDataDiffer
, que aceitamCoroutineContext
em vez deCoroutineDispatcher
- Adicionamos uma nova interface funcional
PagingSourceFactory
que oferece uma superfície de API mais explícita do que as lambdasPagingSource
() -> anteriores. Essa fábrica pode ser usada para instanciar um pager.
Versão 3.2.0-rc01
21 de junho de 2023
Lançamento de androidx.paging:paging-*:3.2.0-rc01
. A versão 3.2.0-rc01 contém estas confirmações.
Contribuição externa
- Agradecemos a Veyndan por contribuir para que a paginação não seja específica do Android/JVM. (#553, #554, #555, #559).
Versão 3.2.0-beta01
7 de junho de 2023
Lançamento de androidx.paging:paging-*:3.2.0-beta01
. A versão 3.2.0-beta01 contém estas confirmações.
Paging Compose
- O Paging Compose alcançou oficialmente a estabilidade da API. Por isso, a versão foi atualizada de
1.0.0-alpha20
para corresponder à versão de todos os outros artefatos de paginação.
Mudanças na API
- As APIs
items(LazyPagingItems)
eitemsIndexed(LazyPagingItems)
descontinuadas foram removidas do Compose de paginação. Consulte as notas da versão da Paging Compose1.0.0-alpha20
para conferir um exemplo das APIs de substituição. (I9626e).
Versão 3.2.0-alpha06
24 de maio de 2023
Lançamento de androidx.paging:paging-*:3.2.0-alpha06
. A versão 3.2.0-alpha06 contém estas confirmações.
Novos recursos
- Uma nova interface funcional
PagingSourceFactory
foi adicionada, que oferece uma plataforma de API mais explícita do que os lambdas() -> PagingSource
atuais. Essa fábrica pode ser usada para instanciar umPager
. (I33165, b/280655188). - Adição de uma nova API
paging-testing
deList<Value>.asPagingSourceFactory()
para receber umPagingSourceFactory
que só carrega de uma lista de dados imutável. A extensão atual emFlow<List<Value>>
ainda precisa ser usada para testes com várias gerações de dados estáticos. (Id34d1, b/280655188).
Mudanças na API
- Todas as APIs públicas em testes de paginação agora são anotadas com
@VisibleForTesting
para garantir que sejam usadas apenas em testes. (I7db6e). - A API
asSnapshot
não precisa mais transmitir umCoroutineScope
. Agora, o padrão é usar o contexto herdado do escopo pai. (Id0a78, b/282240990). - Os parâmetros do construtor
TestPager
foram reordenados para corresponder intuitivamente à ordem dos parâmetros reais do construtorPager
(I6185a). - O uso de tipo lambda
() -> PagingSource<Key, Value>
do teste de paginação foi migrado para o tipoPagingSourceFactory<Key, Value>
. (I4a950, b/280655188).
Mudanças de comportamento
- O agente principal não precisa mais executar testes de paginação
asSnapshot
. A configuração não muda o comportamento do teste. (Ie56ea).
Versão 3.2.0-alpha05
3 de maio de 2023
Lançamento de androidx.paging:paging-*:3.2.0-alpha05
. A versão 3.2.0-alpha05 contém estas confirmações.
Mudanças na API
- A API de teste de paginação do
asSnapshot
agora define o parâmetroloadOperations
como uma lambda vazia. Isso permite chamarasSnapshot
sem transmitir nenhuma operação de carga para recuperar os dados da carga de atualização inicial. (Ied354, b/277233770).
Melhorias na documentação
- Atualizamos a documentação sobre
asPagingSourceFactory()
para esclarecer que ele é um método de extensão em umFlow
que retorna uma fábrica reutilizável para gerar instâncias dePagingSource
. (I5ff4f, I705b5). - A documentação do construtor
LoadResult.Page
foi atualizada para esclarecer a necessidade de substituiritemsBefore
eitemsAfter
para oferecer suporte ao salto. (Ied354).
Contribuições externas
- Agradecemos a Veyndan por contribuir para que a paginação não seja específica do Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493).
Versão 3.2.0-alpha04
8 de fevereiro de 2023
Lançamento de androidx.paging:paging-*:3.2.0-alpha04
. A versão 3.2.0-alpha04 contém estas confirmações.
Teste de Paging
- O artefato
paging-testing
agora contém um métodoasPagingSourceFactory
para criar umapagingSourceFactory
usando umFlow<List<Value>>
a ser fornecido para um Pager. CadaList<Value>>
emitido do fluxo representa uma geração de dados paginados. Isso facilita os testes de paginação em, por exemplo, transformaçõesPagingData
ao simular uma origem de dados para que o Pager colete (I6f230, b/235528239). O artefato
paging-testing
foi expandido com novas APIs adequadas para verificar se os dados contidos em umFlow<PagingData<T>>
estão corretos. Isso pode ser usado, por exemplo, para declarar a saída de umFlow<PagingData<T>>
da camada ViewModel.Isso é feito usando a extensão
asSnapshot
do Kotlin noFlow<PagingData<Value>>
, que converte oFlow<PagingData<Value>>
em umList<Value>
direto. O lambdaasSnapshot
permite imitar a interface do app usando APIs comoscrollTo
ouappendScrollWhile
de uma maneira que possa ser repetida e consistente. Assim, você pode verificar se o snapshot dos dados está correto a qualquer momento no conjunto de dados paginados.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshot
é um métodosuspend
que precisa ser executado norunTest
. Consulte Como testar corrotinas do Kotlin no Android para ter mais informações. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239).
Mudanças na API
- As chamadas de interface para
getItem
epeek
emAsyncPagingDataDiffer
ePagingDataAdapter
agora estão corretamente marcadas como apenas chamáveis na linha de execução principal (I699b6). - Remoção de caracteres curinga de tipos genéricos usados pelo
TestPager
, o que facilita o consumo dos resultados desses métodos no código escrito usando a linguagem de programação Java (I56c42).
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
porLoadResult.Page.iterator()
. Isso permite indiretamente o uso do métodoflatten
da biblioteca padrão de Kotlin (link em inglês) quando recebe umaList<LoadResult.Page>
, como a propriedadepages
doPagingState
que é transmitida para o métodoPagingSource.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
ouPagingDataAdapter
para expor informações de depuração coletadas dePagingData
. - 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 usarpaging-common:3.2.0-alpha01
no ambiente de execuçãopaging-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
eAsyncPagingDataDiffer
, que aceitamCoroutineContext
em vez deCoroutineDispatcher
(Idc878). - Por padrão,
PagingData.from()
ePagingData.empty()
não vão mais afetar o construtorCombinedLoadStates
no apresentador. Uma nova sobrecarga que permite transmitirsourceLoadStates
eremoteLoadStates
a esses construtores foi adicionada para manter o comportamento da configuração deLoadStates
e ser totalmente terminal (ou seja,NotLoading(endOfPaginationReached = false)
), com a opção de também incluir estados remotos, se necessário. Caso a classeLoadStates
não seja transmitida, oCombinedLoadStates
anterior será mantido no lado do apresentador quando receber aPagingData
estática (Ic3ce5, b/205344028).
Correções de bugs
- Agora, temos a priorização do resultado de
PagingSource.getRefreshKey()
em vez de um elementoinitialKey
nos casos em que ele retornaria nulo, mas uminitialKey
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 noLoadState
, removendo eventosLoadState.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
eFlow<PagingData>.flowable
não são mais experimentais. - Mudanças de comportamento para
LoadState
:endOfPaginationReached
agora é semprefalse
paraLoadType.REFRESH
emPagingSource
eRemoteMediator
.- Os
LoadStates
da Paging agora aguardam valores válidos dePagingSource
eRemoteMediator
antes de emitir downstream. Agora, novas gerações dePagingData
sempre começarão corretamente comLoading
(carregando) para o estado de atualização, em vez de redefinir paraNotLoading
(não carregando) incorretamente em alguns casos. - Os
.loadStateFlow
e.addLoadStateListener
nas APIs de apresentador não enviam mais umCombinedLoadStates
redundante inicial que sempre tenha estados de mediador definidos comonull
.
- O cancelamento em gerações anteriores agora acontece normalmente em caso de invalidação / novas gerações. Não é mais necessário usar
.collectLatest
emFlow<PagingData>
, embora ainda seja recomendado fazer isso. - O
PagingSource.LoadResult.Invalid
foi adicionado como um novo tipo de retorno dePagingSource.load
, o que faz com que a Paging descarte qualquer solicitação de carregamento pendente ou futura para essePagingSource
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
eFlow<PagingData>.flowable
não são mais experimentais (Ie0bdd).
Correções de bugs
- Para LoadStates, o
endOfPaginationReached
agora é semprefalse
paraLoadType.REFRESH
. Antes, era possível que o elemento endOfPaginationReached fossetrue
para o RemoteMediatorREFRESH
, mas não para a PagingSource. Esse comportamento agora foi consolidado para sempre retornarfalse
, 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 umCombinedLoadStates
redundante inicial que sempre tenha estados de mediador definidos comonull
e os estados de origem definidos comoNotLoading(endOfPaginationReached = false)
. O que isso significa:- Os estados do mediador serão sempre preenchidos se você usar o RemoteMediator.
- Registrar um novo listener loadState ou um novo coletor em
.loadStateFlow
não emitirá mais o valor atual imediatamente se ele não tiver recebidoCombinedLoadStates
reais dePagingData
. Isso pode acontecer se um coletor ou listener for iniciado antes do envio dePagingData
(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 pacoteandroidx.paging.rxjava3
para que não entrem em conflito compaging-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-alpha20
24 de maio de 2023
Lançamento de androidx.paging:paging-compose:1.0.0-alpha20
. A versão 1.0.0-alpha20 contém estas confirmações.
Novos recursos
- O Paging Compose agora oferece suporte à visualização de uma lista de dados falsos criando um
PagingData.from(fakeData)
e envolvendo essePagingData
em umMutableStateFlow
(por exemplo,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Ao usar esses dados como entrada no@Preview
, as chamadas paracollectAsLazyPagingItems()
vão fornecerLazyPagingItems
com visualização. (I8a78d, b/194544557).
Correções de bugs
- Os dados em cache de
pager.flow.cachedIn
coletados emLazyPagingItems
agora vão ficar disponíveis imediatamente após a restauração de estado sem a necessidade de coleta assíncrona. Isso significa que os dados em cache estarão prontos para apresentação imediatamente após a composição inicial, depois que o estado for restaurado. (I97a60, b/177245496).
Versão 1.0.0-alpha19
3 de maio de 2023
Lançamento de androidx.paging:paging-compose:1.0.0-alpha19
. A versão 1.0.0-alpha19 contém estas confirmações.
Suporte a todos os layouts lentos
Anteriormente, o Paging Compose oferecia extensões personalizadas de items
e itemsIndexed
no LazyListScope
, o que significa que você não podia usar o Paging Compose com outros layouts preguiçosos, como LazyVerticalGrid
, HorizontalPager
ou outros componentes preguiçosos personalizados fornecidos pelas bibliotecas Wear e TV. A correção dessa rigidez é a principal atualização desta versão.
Para oferecer suporte a mais layouts lentos, precisamos criar APIs em uma camada diferente. Em vez de fornecer uma API items
personalizada para cada layout lento, o Paging Compose agora oferece métodos de extensão de nível um pouco mais baixos em LazyPagingItems
em itemKey
e itemContentType
. O objetivo dessas APIs é ajudar você a implementar os parâmetros key
e contentType
nas APIs items
padrão que já existem para LazyColumn
, LazyVerticalGrid
e equivalentes em APIs como HorizontalPager
. (Ifa13b, Ib04f0, b/259385813).
Isso significa que o suporte a um LazyVerticalGrid
seria assim:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
Para mais exemplos de uso dessas novas APIs, consulte nossos exemplos.
Embora essas mudanças aumentem o número de linhas dos exemplos de LazyColumn
e LazyRow
, a consistência em todos os layouts preguiçosos foi um fator importante para quem usa o Paging Compose. Por isso, as extensões de LazyListScope
foram descontinuadas. (I0c459, I92c8f, b/276989796).
Mudanças na API
- Para facilitar a migração para as novas APIs, as funções de extensão
items
eitemsIndexed
emLazyListScope
agora oferecem suporte a um parâmetrocontentType
, refletindo o suporte nas novas APIs. (Ib1918, b/255283378).
Atualizações de dependência
- O Paging Compose atualizou a dependência do Compose 1.0.5 para o Compose 1.2.1. (Ib1918, b/255283378).
Versão 1.0.0-alpha18
8 de fevereiro de 2023
Lançamento de androidx.paging:paging-compose:1.0.0-alpha18
sem mudanças. A versão 1.0.0-alpha18 contém estas confirmações.
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
- Foi adicionado suporte a um
CoroutineContext
personalizado ao chamarcollectLazyPagingItems
(I7a574, b/243182795, b/233783862).
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 usarpaging-compose:1.0.0-alpha15
nopaging-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
eAsyncPagingDataDiffer
, que aceitamCoroutineContext
em vez deCoroutineDispatcher
(Idc878).
Correções de bugs
- A classe
LazyPagingItems
agora define oloadState
inicial para ter uma atualização deLoadState.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 propriedadeLazyPagingItems.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)
eitemsIndexed(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. UselazyPagingItems[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 Compose1.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 deLoading
paraNotLoading
somente depois que os estados de carregamento do mediador e da origem foremNotLoading
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()
aLazyPagingItem
s que expõem a mesma funcionalidade disponível emAsyncPagingDataDiffer
/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 pelaLivePagedList
ouRxPagedList
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 semprenull
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 APIsDataSource
v2 com caminhos de compatibilidade. - A chamada
isInvalid
durante a inicialização daDataSource
, quando usada por caminhos de compatibilidade, agora é iniciada corretamente em fetchDispatcher, e não na linha de execução principal. Isso corrige umaIllegalStateException
devido ao acesso do Db na linha de execução principal ao usar a implementaçãoPagingSource
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 retornanull
, masgetRefreshKey()
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 viaPagingState.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 duranteadapter.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 deLoading
paraNotLoading
somente depois que os estados de carregamento do mediador e da origem foremNotLoading
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 aoPagingConfig.pageSize
, exceto para a chamada de carregamento inicial em que ele é igual aoPagingConfig.initialLoadSize
.Se você estiver testando a DataSource da Pagin2 sem usar um Pager ou uma PagedList, o
pageSize
pode não corresponder aoPagingConfig.pageSize
se você também estiver definindoinitialLoadSize
. 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 oDataSource
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
edataRefreshListener
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 deAPPEND
ePREPEND
(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
ouAPPEND
(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 ePagingSource.load(LoadParams.Refresh(...))
forem concluídos antes deRemoteMediator.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 adicionar ao final/adicionar ao início 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 quePagingDataAdapter.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 aAsyncPagingDataDiffer
ePagingDataAdapter
para permitir o acesso a dados apresentados sem acionar carregamentos de página (I38898, b/159104197). - A API
snapshot()
foi adicionada aPagingDataAdapter
eAsyncPagingDataDiffer
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
eRemoteMediator
(I49ef3, b/161480176).
Correções de bugs
- A
PositionalDataSource
convertida emPagingSource
pelo auxiliartoPagingSourceFactory
, incluindo aPagingSource
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
eAsyncPagingDataDiffer
com valores padrão comuns (Ie91f5). - As APIs do adaptador,
dataRefreshFlow
edataRefreshListener
, agora transmitem um booleano para sinalizar se umPagingData
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()
efirstItemOrNull()
(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áriosPagingData
quando chamada após a versão de suspensão desubmitData
(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
- Suporte de primeira classe para corrotinas e fluxo do Kotlin.
- Suporte para carregamento assíncrono com funções de suspensão de corrotinas e primitivos RxJava Single ou Guava ListenableFuture.
- Sinais de erro e estado de carregamento integrados para design de IU responsivo, incluindo as funcionalidades tentar novamente e atualizar.
- Melhorias na camada do repositório
- Interface simplificada da fonte de dados
- Rede simplificada + paginação do banco de dados
- Compatível com cancelamento
- Melhorias na camada de apresentação
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 paraPagedList.Config.Builder
. - Adição de
androidx.paging.PagedList()
como alternativa Kotlin paraPagedList.Builder
. - Adição de
DataSourceFactory.toLiveData()
como alternativa Kotlin paraLivePagedListBuilder
. - Adição de
DataSourceFactory.toObservable()
etoFlowable()
como alternativas Kotlin paraRxPagedListBuilder
. - 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 geraIndexOutOfBoundsException
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 quePagedListAdapter
eAsyncPagedListDiffer
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
eAsyncPagedListDiffer
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
Observable
s e Flowable
s, usando Scheduler
s em vez de Executor
s:
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 artefatoandroid.arch.paging:rxjava2
.
Mudanças na API
Mudanças de API para esclarecer o papel dos executores em builders:
setBackgroundThreadExecutor()
renomeado comosetFetchExecutor()
(emPagedList.Builder
eLivePagedListBuilder
)setMainThreadExecutor()
renomeado comosetNotifyExecutor()
(emPagedList.Builder
).
O membro
PagedList.mCallbacks
foi corrigido para que seja privado.
Correções de bugs
LivePagedListBuilder
aciona o carregamento inicial dePagedList
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 oDataSource.map
, bem como o carregamento dePositionalDataSource
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 objetosDataSource.LoadCallback
agora são abstratos. Isso permite unir oDataSource
ou testar diretamente umDataSource
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 umDataSource
.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 oLivePagedListProvider
. 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 paraPositionalDataSource
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.