Cercapersone
Questa tabella elenca tutti gli elementi del gruppo androidx.paging
.
Elemento | Release stabile | Candidato per l'uscita | Versione beta | Release alpha |
---|---|---|---|---|
paging-* | 3.3.2 | - | - | - |
paging-componi | 3.3.2 | - | - | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza su Paging, devi aggiungere il Repository Maven di Google al tuo progetto. Consulta il Repository Maven di Google per ulteriori informazioni.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
Alla moda
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") }
Per informazioni sull'utilizzo delle estensioni Kotlin, vedi documentazione ktx.
Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze nella build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Non esitare a contattarci in caso di nuovi problemi o idee per migliorare questa raccolta. Dai un'occhiata alle problemi esistenti in questa raccolta, prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente tramite facendo clic sul pulsante a forma di stella.
Consulta la documentazione di Issue Tracker per ulteriori informazioni.
Versione 3.3
Versione 3.3.2
7 agosto 2024
Viene rilasciato androidx.paging:paging-*:3.3.2
. La versione 3.3.2 contiene questi commit.
Nuove funzionalità
paging-common
epaging-testing
hanno aggiunto nuovi obiettivi Kotlin multipiattaforma:watchos
,tvos
elinuxArm64
(90c9768), (53e0eca)
Versione 3.3.1
24 luglio 2024
Viene rilasciato androidx.paging:paging-*:3.3.1
. La versione 3.3.1 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui
AsyncPagingDataDiffer
o le API basate su elementi comePagingDataAdapter
utilizzate conRecyclerView
non sarebbero in grado di attivare più caricamenti quando l'origine dati di supporto veniva aggiornata durante lo scorrimento. (I60ca5, b/352586078) - È stato corretto un arresto anomalo che si verifica quando gli elementi vengono rimossi dall'origine dati di supporto durante lo scorrimento di un
RecyclerView
utilizzandoPagingDataAdapter
oAsyncPagingDataDiffer
. (I8c65a, b/347649763)
Versione 3.3.0
14 maggio 2024
Viene rilasciato androidx.paging:paging-*:3.3.0
. La versione 3.3.0 contiene questi commit.
Modifiche importanti dalla versione 3.2.0
PagingDataPresenter
ora è un corso pubblico. I presentatori multipiattaforma ora possono essere creati suPagingDataPresenter
anziché richiedere API di paging interne oAsyncPagingDataDiffer
dipaging-runtime
.- Sono stati aggiunti nuovi metodi helper
LoadStates
eCombinedLoadStates
inhasError
eisIdle
per verificare seLoadStates
è rispettivamente in stato Errore oNotLoading
. È stato anche aggiunto un nuovo metodo di estensione KotlinawaitNotLoading()
suFlow<CombinedLoadStates>
, che attende fino a quando un caricamento non passa allo statoNotLoading
o Errore. - Ora
PagingData.empty()
inviaNotLoading
stati per impostazione predefinita, a meno che gliLoadStates
personalizzati non vengano passati al relativo costruttore. Si discosta dal comportamento esistente in cui non inviaLoadStates
quando viene inviato a unPagingDataAdapter
o invia gli stati di caricamento quando vengono raccolti comeLazyPagingItems
. Una volta raccolto comeLazyPagingItems
, ora verrà visualizzato anche un elenco vuoto subito dopo la composizione iniziale.
Compatibilità multipiattaforma Kotlin
Paging ora invia artefatti compatibili con Kotlin Multiplatform, grazie in gran parte al lavoro upstream del progetto multiplatform-paging di CashApp.
paging-common
ha spostato tutte le API Paging 3 incommon
ed è ora compatibile con jvm e iOS, oltre ad Android.paging-testing
ha spostato il proprio codice incommon
ed è ora compatibile con jvm e iOS, oltre che con Android.paging-compose
ha spostato il suo codice sucommon
e spedisce un artefatto Android, corrispondente al supporto multipiattaforma diandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
rimarranno solo su Android.
Versione 3.3.0-rc01
1° maggio 2024
androidx.paging:paging-*:3.3.0-rc01
viene rilasciato senza modifiche in Paging 3.3.0-beta01. La versione 3.3.0-rc01 contiene questi commit.
Versione 3.3.0-beta01
3 aprile 2024
androidx.paging:paging-*:3.3.0-beta01
viene rilasciato senza modifiche degne di nota. La versione 3.3.0-beta01 contiene questi commit.
Versione 3.3.0-alpha05
20 marzo 2024
Viene rilasciato androidx.paging:paging-*:3.3.0-alpha05
. La versione 3.3.0-alpha05 contiene questi commit.
Modifiche alle API
- Il paging ora utilizza l'annotazione
@MainThread
Annotazione AndroidX per il codice comune. (I78f0d, b/327682438)
Versione 3.3.0-alpha04
6 marzo 2024
Viene rilasciato androidx.paging:paging-*:3.3.0-alpha04
. La versione 3.3.0-alpha04 contiene questi commit.
Correzioni di bug
- Sono stati corretti errori minori nella documentazione relativi all'aggiunta della compatibilità multipiattaforma Kotlin. (aosp/2950785)
Versione 3.3.0-alpha03
7 febbraio 2024
Viene rilasciato androidx.paging:paging-*:3.3.0-alpha03
. La versione 3.3.0-alpha03 contiene questi commit.
Nuove funzionalità
PagingDataPresenter
ora è un corso pubblico. I presentatori multipiattaforma ora possono essere creati suPagingDataPresenter
anziché richiedere API di paging interne oAsyncPagingDataDiffer
dipaging-runtime
. (Id1f74, b/315214786)- Sono stati aggiunti nuovi metodi helper
LoadStates
eCombinedLoadStates
per verificare seLoadStates
è in stato Errore oNotLoading
. È stata inoltre aggiunta una nuova API che attende su unLoadStateFlow
fino a quando un carico non si attesta nello statoNotLoading
o Errore. (ID6c67)
Cambiamento del comportamento
- Ora
PagingData.empty()
inviaNotLoading
stati per impostazione predefinita, a meno che gliLoadStates
personalizzati non vengano passati al relativo costruttore. Si discosta dal comportamento esistente in cui non inviaLoadStates
quando viene inviato a unPagingDataAdapter
o invia gli stati di caricamento quando vengono raccolti comeLazyPagingItems
. Una volta raccolto comeLazyPagingItems
, ora verrà visualizzato anche un elenco vuoto subito dopo la composizione iniziale. (I4d11d, b/301833847)
Versione 3.3.0-alpha02
20 settembre 2023
Viene rilasciato androidx.paging:paging-*:3.3.0-alpha02
. La versione 3.3.0-alpha02 contiene questi commit.
Compatibilità multipiattaforma Kotlin
Paging ora invia artefatti compatibili con Kotlin Multiplatform, grazie in gran parte al lavoro upstream del progetto multiplatform-paging di CashApp. Questo ci consentirà di evitare divergenza tra due repository e di mantenerli compatibili.
paging-common
ha spostato tutte le API Paging 3 incommon
ed è ora compatibile con jvm e iOS, oltre ad Android.paging-testing
ha spostato il proprio codice incommon
ed è ora compatibile con jvm e iOS, oltre che con Android.paging-compose
ha spostato il suo codice sucommon
e spedisce un artefatto Android, corrispondente al supporto multipiattaforma diandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
rimarranno solo su Android.
Modifiche alle API
- L'interfaccia pubblica di Logger, destinata solo all'uso interno, è stata deprecata (I16e95, b/288623117)
Contributo esterno
Versione 3.3.0-alpha01
20 settembre 2023
- Questa è la prima release multipiattaforma delle librerie androidx.paging. Questa versione ha solo elementi
*-jvm
e*-android
. Per le varianti macOS, iOS e Linux, utilizza3.3.0-alpha02
.
Versione 3.2
Versione 3.2.1
6 settembre 2023
Viene rilasciato androidx.paging:paging-*:3.2.1
. La versione 3.2.1 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui l'API
asSnapshot()
dell'artefatto di test di paging si bloccava durante il passaggio di un flusso creato utilizzandoPagingData.from(List)
poichéasSnapshot()
non avrebbe alcuna informazione sul termine del caricamento (a differenza del sovraccarico diPagingData.from(List, LoadStates)
). Questa soluzione alternativa funziona solo per i flussi completabili (ad es. unflowOf(PagingData.from(...))
). Per i flussi non completabili (ad es.MutableStateFlow
, utilizza l'overloadPagingData.from
che fornisceLoadStates
). (I502c3). - Paging Compose ora utilizza internamente
AndroidUiDispatcher.Main
per garantire che i nuovi dati siano disponibili nello stesso frame al termine del caricamento. (Ia55af)
Versione 3.2.0
26 luglio 2023
Viene rilasciato androidx.paging:paging-*:3.2.0
. La versione 3.2.0 contiene questi commit.
Modifiche importanti dalla versione 3.1.0
- Paging Compose ha raggiunto la stabilità dell'API ed è stato unito di nuovo al resto di Paging, dove la sua versione ora corrisponde a tutti gli altri artfacts di Paging. Le modifiche apportate dalla versione 3.1.0 includono:
- È supportata la visualizzazione dell'anteprima di un elenco di dati falsi mediante la creazione di un
PagingData.from(fakeData)
e il wrapping diPagingData
in unMutableStateFlow
(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Passa questo flusso ai componibili@Preview
come ricevitore percollectAsLazyPagingItems()
l'anteprima. - Supporto per tutti i layout lenti come
LazyVerticalGrid
eHorizontalPager
, nonché per componenti lenti personalizzati dalle raccolte di Wear e TV. Questo risultato è stato ottenuto mediante i nuoviLazyPagingItems
metodi di estensioneitemKey
eitemContentType
di livello inferiore, che consentono di implementare i parametrikey
econtentType
nelle APIitems
standard già esistenti perLazyColumn
eLazyVerticalGrid
, nonché nei loro equivalenti in API comeHorizontalPager
. items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
, che supportano soloLazyListScope
, sono stati ritirati.
- È supportata la visualizzazione dell'anteprima di un elenco di dati falsi mediante la creazione di un
- Nuovo artefatto
paging-testing
che fornisce API progettate per testare ogni livello dell'app e la sua integrazione con la funzionalità di impaginazione in modo isolato. Ad esempio, includeTestPager
che ti consente di convalidare il comportamento della tua implementazione diPagingSource
personalizzata indipendentemente dal cercapersone e dall'interfaccia utente reale.asPagingSourceFactory
API per trasformare unFlow<List<Value>>
o unList<Value>
statico in unPagingSourceFactory
che può essere passato a un cercapersone nei testasSnapshot
estensione Kotlin suFlow<PagingData<Value>>
, che traduceFlow<PagingData<Value>>
in unList<Value>
diretto. L'asSnapshot lambda
ti consente di imitare l'UI della tua app tramite API comescrollTo
oappendScrollWhile
, in modo da poter verificare che l'istantanea dei dati sia corretta in qualsiasi momento nel tuo set di dati di paging.
- Sono stati aggiunti log predefiniti per esporre le informazioni di debug di Paging in due livelli:
VERBOSE
eDEBUG
. I log possono essere abilitati tramite il comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Questo vale sia per l'impaginazione con visualizzazioni sia per l'impaginazione con Compose. - Sono stati aggiunti costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. - È stata aggiunta una nuova interfaccia funzionale
PagingSourceFactory
che offre una superficie API più esplicita rispetto alla versione precedente () ->PagingSource
lambda. Questa fabbrica può essere utilizzata per creare un'istanza di un cercapersone.
Versione 3.2.0-rc01
21 giu 2023
Viene rilasciato androidx.paging:paging-*:3.2.0-rc01
. La versione 3.2.0-rc01 contiene questi commit.
Contributo esterno
- Grazie Veyndan per aver contribuito ad abbandonare le specifiche di Android/JVM. (#553, #554, #555, #559)
Versione 3.2.0-beta01
7 giugno 2023
Viene rilasciato androidx.paging:paging-*:3.2.0-beta01
. La versione 3.2.0-beta01 contiene questi commit.
Scrittura pacchetti
- Paging Compose ha ufficialmente raggiunto la stabilità dell'API. Pertanto, la versione è stata aggiornata da
1.0.0-alpha20
per corrispondere alla versione di tutti gli altri elementi di Paging.
Modifiche alle API
- Sono state rimosse le API
items(LazyPagingItems)
eitemsIndexed(LazyPagingItems)
deprecate da Paging Compose. Consulta le note di rilascio di1.0.0-alpha20
Paging Compose per un esempio delle relative API sostitutive. (I9626e)
Versione 3.2.0-alpha06
24 maggio 2023
Viene rilasciato androidx.paging:paging-*:3.2.0-alpha06
. La versione 3.2.0-alpha06 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova interfaccia funzionale
PagingSourceFactory
che fornisce una superficie API più esplicita rispetto alle lambda() -> PagingSource
esistenti. Questo fabbrica può essere utilizzato per creare un'istanza di unPager
. (I33165, b/280655188) - È stata aggiunta la nuova API
paging-testing
diList<Value>.asPagingSourceFactory()
per ottenere unPagingSourceFactory
che viene caricato solo da un elenco immutabile di dati. L'estensione esistente suFlow<List<Value>>
deve comunque essere utilizzata per i test con più generazioni di dati statici. (Id34d1, b/280655188)
Modifiche alle API
- Tutte le API pubbliche nei test di paging sono ora annotate con
@VisibleForTesting
per garantire che queste API vengano utilizzate solo nei test. (I7db6e) - L'API
asSnapshot
non richiede più la trasmissione di unCoroutineScope
. Ora per impostazione predefinita utilizza il contesto ereditato dall'ambito padre. (Id0a78, b/282240990) - Parametri del costruttore
TestPager
riordinati in modo che corrispondano in modo intuitivo all'ordine dei parametri reali del costruttorePager
(I6185a) - È stato eseguito la migrazione dell'utilizzo del tipo lambda
() -> PagingSource<Key, Value>
da parte dei test di paging per il tipoPagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
Cambiamenti del comportamento
- Il supervisore principale non è più tenuto a eseguire
asSnapshot
test di imbarazzo. La configurazione non apporta più modifiche al comportamento del test. (Ie56ea).
Versione 3.2.0-alpha05
3 maggio 2023
Viene rilasciato androidx.paging:paging-*:3.2.0-alpha05
. La versione 3.2.0-alpha05 contiene questi commit.
Modifiche alle API
- Ora l'impostazione predefinita del parametro
loadOperations
dell'API Paging Testing diasSnapshot
è un valore lambda vuoto. Ciò consente di chiamareasSnapshot
senza passare alcuna operazione di caricamento per recuperare i dati dal caricamento di aggiornamento iniziale. (Ied354, b/277233770)
Miglioramenti alla documentazione
- È stata aggiornata la documentazione il giorno
asPagingSourceFactory()
per chiarire che si tratta di un metodo di estensione su unFlow
che restituisce una fabbrica riutilizzabile per la generazione di istanzePagingSource
. (I5ff4f, I705b5) - È stata aggiornata la documentazione sul costruttore
LoadResult.Page
per chiarire la necessità di eseguire l'override diitemsBefore
eitemsAfter
per supportare il salto. (Ied354)
Contributi esterni
- Grazie Veyndan per aver contribuito ad abbandonare le specifiche di Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, N. 493)
Versione 3.2.0-alpha04
8 febbraio 2023
Viene rilasciato androidx.paging:paging-*:3.2.0-alpha04
. La versione 3.2.0-alpha04 contiene questi commit.
Test di imballaggio
- L'artefatto
paging-testing
ora contiene un metodoasPagingSourceFactory
per creare unpagingSourceFactory
da unFlow<List<Value>>
da fornire a un cercapersone. OgniList<Value>>
emesso dal flusso rappresenta una generazione di dati di impaginazione. Ciò semplifica i test di paging su, ad esempio, trasformazioniPagingData
, falsificando un'origine dati da cui il pager può raccogliere. (I6f230, b/235528239) L'artefatto
paging-testing
è stato espanso con nuove API adatte a verificare che i dati contenuti con unFlow<PagingData<T>>
siano corretti. Può essere usato, ad esempio, per asserire l'output di unFlow<PagingData<T>>
dal tuo livello ViewModel.Ciò viene fatto tramite l'estensione Kotlin
asSnapshot
suFlow<PagingData<Value>>
, che traduceFlow<PagingData<Value>>
in unList<Value>
diretto. La funzione lambdaasSnapshot
ti consente di imitare l'UI della tua app tramite API comescrollTo
oappendScrollWhile
in modo ripetibile e coerente, in modo da poter verificare che l'istantanea dei dati sia corretta in qualsiasi momento nel tuo set di dati di paging.// 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
è un metodosuspend
che dovrebbe essere eseguito entrorunTest
. Per ulteriori informazioni, leggi la sezione Test di coroutine Kotlin su Android. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, I7}9,6138I25138
Modifiche alle API
- Le chiamate UI a
getItem
epeek
inAsyncPagingDataDiffer
ePagingDataAdapter
sono ora contrassegnate correttamente come richiamabili solo nel thread principale. (I699b6) - Sono stati rimossi i caratteri jolly dai tipi generici utilizzati da
TestPager
, in modo da semplificare l'utilizzo dei risultati di questi metodi nel codice scritto nel linguaggio di programmazione Java. (I56c42).
Versione 3.2.0-alpha03
24 ottobre 2022
Viene rilasciato androidx.paging:paging-*:3.2.0-alpha03
. La versione 3.2.0-alpha03 contiene questi commit.
Test di imballaggio
Questa release contiene un nuovo elemento: paging-testing
. Questo artefatto fornisce API progettate per il test delle unità su ogni livello dell'app e la sua integrazione con la funzionalità di impaginazione in modo isolato.
Ad esempio, questa prima release include una classe TestPager
che consente di convalidare il comportamento della tua implementazione di PagingSource
personalizzata indipendentemente dalla Pager
e dall'interfaccia utente reale normalmente necessaria per simulare l'integrazione end-to-end di Paging.
TestPager
deve essere considerato un falso: un doppio di test che rispecchia l'implementazione reale di Pager
e fornisce al contempo una superficie API semplificata per testare un PagingSource
. Queste API sono API suspend
e devono essere eseguite all'interno di runTest
come descritto nella guida per testare le coroutine Kotlin su Android.
Un esempio di queste API in uso si trova nei test di room-paging
, sottoposti a refactoring in modo da utilizzare TestPager
.
Modifiche alle API
- Consente un'iterazione pratica da
LoadResult.Page.data
aLoadResult.Page.iterator()
. Ciò consente indirettamente l'utilizzo del metodo della libreria standardflatten
di Kotlin quando viene fornito unList<LoadResult.Page>
, ad esempio con la proprietàpages
diPagingState
passata al metodoPagingSource.getRefreshKey
. (Ie0718)
Versione 3.2.0-alpha02
10 agosto 2022
Viene rilasciato androidx.paging:paging-*:3.2.0-alpha02
. La versione 3.2.0-alpha02 contiene questi commit.
Nuove funzionalità
- Il paging ora fornisce log tramite le classi
AsyncPagingDataDiffer
oPagingDataAdapter
per esporre le informazioni di debug raccolte daPagingData
. - I log possono essere abilitati tramite il comando
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
Correzioni di bug
- È stato corretto l'errore del costruttore
PagingDataDiffer
mancante quando si utilizzavapaging-common:3.2.0-alpha01
con runtimepaging-runtime:3.1.1
o precedente.(b/235256201)
Versione 3.2.0-alpha01
1 giugno 2022
Viene rilasciato androidx.paging:paging-*:3.2.0-alpha01
. La versione 3.2.0-alpha01 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. (Idc878) - Per impostazione predefinita,
PagingData.from()
ePagingData.empty()
non influiranno più suCombinedLoadStates
lato presentatore. È stato aggiunto un nuovo sovraccarico che consente il passaggio disourceLoadStates
eremoteLoadStates
a questi costruttori per mantenere il comportamento esistente dell'impostazione diLoadStates
in modo che sia completamente terminale (ad es.NotLoading(endOfPaginationReached = false)
), con la possibilità di includere anche gli stati remoti, se necessario. SeLoadStates
non vengono superati, iCombinedLoadStates
precedenti verranno mantenuti sul lato presentatore quando riceve ilPagingData
statico. (Ic3ce5, b/205344028)
Correzioni di bug
- Il risultato di
PagingSource.getRefreshKey()
è ora correttamente assegnato alla priorità diinitialKey
nei casi in cui restituirebbe un valore nullo, ma è stato impostato uninitialKey
non nullo. (Ic9542, b/230391606)
Contributo esterno
- Aggiornamento dell'API :compose:ui:ui-test (updateApi) a causa della migrazione di test-coroutines-lib (I3366d)
Versione 3.1
Versione 3.1.1
9 marzo 2022
Viene rilasciato androidx.paging:paging-*:3.1.1
. La versione 3.1.1 contiene questi commit.
Correzioni di bug
- Sono stati rimossi gli eventi
LoadState.NotLoading
intermedi tra le generazioni che sono stati inseriti in modo errato da.cachedIn()
. Questa modifica semplifica la reazione alle modifiche diLoadState
rimuovendo gli eventiLoadState.NotLoading
ridondanti che sono stati prodotti tra nuovi caricamenti non riusciti, durante l'aggiornamento o durante l'annullamento della convalida.
Versione 3.1.0
17 novembre 2021
Viene rilasciato androidx.paging:paging-*:3.1.0
. La versione 3.1.0 contiene questi commit.
Modifiche importanti dalla versione 3.0.0
- Le API
Flow<PagingData>.observable
eFlow<PagingData>.flowable
non sono più sperimentali - Il comportamento cambia in
LoadState
:endOfPaginationReached
ora è semprefalse
perLoadType.REFRESH
sia perPagingSource
che perRemoteMediator
LoadStates
da Paging ora attende valori validi sia daPagingSource
che daRemoteMediator
prima di essere inviati a valle. Le nuove generazioni diPagingData
ora inizieranno sempre correttamente conLoading
per lo stato di aggiornamento anziché in alcuni casi reimpostate erroneamente aNotLoading
..loadStateFlow
e.addLoadStateListener
sulle API del presentatore non inviano più in modo ridondante unCombinedLoadStates
iniziale che abbia sempre gli stati del mediatore impostati sunull
- L'annullamento sulle generazioni precedenti ora avviene con entusiasmo per l'annullamento della convalida o per le nuove generazioni. Non dovrebbe più essere necessario usare
.collectLatest
suFlow<PagingData>
, anche se è comunque consigliato farlo. PagingSource.LoadResult.Invalid
è stato aggiunto come nuovo tipo restituito daPagingSource.load
, il che fa sì che Paging ignori eventuali richieste di caricamento in sospeso o future per questoPagingSource
e lo invalidi. Questo tipo restituito è progettato per gestire dati potenzialmente non validi o obsoleti che possono essere restituiti dal database o dalla rete.- Sono state aggiunte
.onPagesPresented
e.addOnPagesUpdatedListener
API presentatore che si sono attivate in modo sincrono man mano che le pagine vengono presentate nell'interfaccia utente. Gli aggiornamenti delle pagine possono avvenire nei seguenti scenari:- Il caricamento iniziale di una nuova generazione di PagingData viene completato, indipendentemente dal fatto che la nuova generazione contenga modifiche agli elementi presentati. ovvero Il callback verrà ancora attivato da una nuova generazione che completa il caricamento iniziale senza aggiornamenti perché l'elenco è esattamente lo stesso.
- Viene inserita una pagina anche se non contiene nuovi elementi.
- Viene eliminata una pagina anche se era vuota.
Versione 3.1.0-rc01
3 novembre 2021
Viene rilasciato androidx.paging:paging-*:3.1.0-rc01
. La versione 3.1.0-rc01 contiene questi commit.
Correzioni di bug
- È stato risolto un problema di gara + perdita di memoria in .cachedIn() nei casi in cui più eventi di caricamento sono stati inviati dal paging a valle in assenza di osservatori o nel momento in cui un osservatore passa a un nuovo PagingData. (Ib682e)
Versione 3.1.0-beta01
13 ottobre 2021
Viene rilasciato androidx.paging:paging-*:3.1.0-beta01
. La versione 3.1.0-beta01 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui molti accessi rapidi agli elementi potevano causare l'esclusione per essere presi in considerazione in prefetchDistance, causando il blocco dei caricamenti delle pagine. Questo è particolarmente un problema quando molti elementi vengono disposti contemporaneamente in un ordine che darebbe priorità al caricamento in base alla direzione di scorrimento dell'utente. Questi accessi agli elementi sono ora sottoposti a buffer e con priorità sincrona per evitare che vengano eliminati. (aosp/1833273)
Versione 3.1.0-alpha04
29 settembre 2021
Viene rilasciato androidx.paging:paging-*:3.1.0-alpha04
. La versione 3.1.0-alpha04 contiene questi commit.
Modifiche alle API
- API
Flow<PagingData>.observable
eFlow<PagingData>.flowable
non sono più sperimentali. (Ie0bdd).
Correzioni di bug
- Per LoadStates, ora
endOfPaginationReached
è semprefalse
perLoadType.REFRESH
. In precedenza, era possibile endOfPaginationRaggiuntotrue
per RemoteMediatorREFRESH
, ma non per PagingSource. Questo comportamento viene ora consolidato per restituire semprefalse
in quanto non ha mai senso che REFRESH sia terminale e ora è documentato come parte del contratto API in LoadStates. Per decidere se l'impaginazione sia terminata, dovresti sempre farlo in relazione le istruzioni APPEND o ANTEPOSTO. (I047b6) Gli elementi LoadState di Paging ora attendono valori validi di entrambi PagingSource e RemoteMediator prima di emettere i dati a valle tra generazioni. In questo modo, le nuove generazioni di PagingData non possono inviare NotLoading in CombinedLoadStates.source.refresh se era già Caricamento in corso; le nuove generazioni di PagingData ora inizieranno sempre con Caricamento per stato di aggiornamento anziché prima reimpostazione a NotLoading in modo errato, in alcuni casi.
L'annullamento per le generazioni precedenti ora avviene con entusiasmo al momento dell'invalidazione / nuove generazioni. Non dovrebbe più essere necessario utilizzare .collectLatest su
Flow<PagingData>
, anche se consigliamo vivamente di farlo. (I0b2b5, b/177351336, b/195028524).loadStateFlow
e.addLoadStateListener
sulle API presentatore non inviare più in modo ridondante unCombinedLoadStates
iniziale che gli stati del mediatore sono impostati sunull
e gli stati di origine sono impostati suNotLoading(endOfPaginationReached = false)
. Ciò significa che:- gli stati del mediatore saranno sempre compilati se utilizzi RemoteMediator.
- Registrazione di un nuovo listener loadState o di un nuovo raccoglitore su
.loadStateFlow
non emetterà più immediatamente il valore attuale se non ha ricevuto unCombinedLoadStates
reale daPagingData
. Questo può accadere se un raccoglitore o un listener avvia prima dell'invio di unPagingData
. (I1a748)
Versione 3.1.0-alpha03
21 luglio 2021
Viene rilasciato androidx.paging:paging-*:3.1.0-alpha03
. La versione 3.1.0-alpha03 contiene questi commit.
Modifiche alle API
Un terzo tipo restituito di LoadResult, LoadResult.invalid viene aggiunto a PagingSource. Quando viene restituito un file PagingSource.load LoadResult.invalid, il paging eliminerà i dati caricati e invalida PagingSource. Questo tipo restituito è progettato per gestire dati potenzialmente non validi o obsoleti che possono essere restituiti dal database o dalla rete.
Ad esempio, se il database sottostante viene scritto, PagingSource non invalida nel tempo, può restituire incoerenti se la sua implementazione dipende immutabilità del set di dati di supporto da cui viene caricato (ad es. LIMITE implementazioni database di stile OFFSET). In questo scenario, di verificare l'annullamento della convalida dopo il caricamento restituisce LoadResult.invalid, che fa sì che Paging scarta eventuali richieste di caricamento in attesa o future a questo PagingSource e invalidarla.
Questo tipo restituito è supportato anche dall'API Paging2 che sfrutta LivePagedList o RxPagedList. Quando utilizzi un oggetto PagingSource con alle API PagedList di Paging2, il PagedList viene subito scollegato, interrompendo ulteriori tentativi di caricamento dei dati in questo PagedList e attiva l'annullamento della convalida su PagingSource.
LoadResult è una classe protetta, il che significa che non compatibile con l'origine, per cui i casi d'uso usano direttamente I risultati di PagingSource.load dovranno gestire LoadResult.Failed al momento della compilazione. Ad esempio, gli utenti di Kotlin che sfruttano esaustivi: quando controllare il tipo di restituzione dovrà aggiungere un controllo per Tipo non valido. (Id6bd3, b/191806126, b/192013267)
Correzioni di bug
- Callback di invalidazione aggiunti tramite PagingSource.registerinvalidatedCallback o DataSource.addinvalidatedCallback ora si attiva automaticamente se sono stati registrati su un elemento PagingSource / DataSource che era già non valido. Questo risolve un problema di gara che ha causato il calo di Ricerche indicatori di invalidazione e si bloccano quando viene fornita un'origine che era è già non valido durante il caricamento iniziale. Inoltre, invalida i callback vengono ora rimossi correttamente dopo essere stati attivati al massimo una sola volta. (I27e69)
- Inviare il valore iniziale del segnaposto (InitialPagedList) da un flusso PagedList appena creato, ad esempio LivePagedListBuilder o RxPagedListBuilder non cancelleranno più i dati caricati in precedenza.
Versione 3.1.0-alpha02
1 luglio 2021
Viene rilasciato androidx.paging:paging-*:3.1.0-alpha02
. La versione 3.1.0-alpha02 contiene questi commit.
Nuove funzionalità
API del presentatore onPagesPresented e del presentatore del flusso aggiunte che si attivano subito dopo l'aggiornamento delle pagine presentate nell'interfaccia utente.
Poiché questi aggiornamenti sono sincroni con l'UI, puoi chiamare i metodi dell'adattatore ad esempio .snapshot, .getItemCount, per ispezionare lo stato dopo l'aggiornamento è stato applicato. Nota che per la funzione .snapshot() era previsto esplicitamente chiamato perché può essere costoso a ogni aggiornamento.
Gli aggiornamenti delle pagine possono avvenire nei seguenti scenari:
- Il caricamento iniziale di una nuova generazione di PagingData è completato, indipendentemente dal fatto che la nuova generazione abbia presentati. ovvero Una nuova generazione che completa il caricamento iniziale senza aggiornamenti perché l'elenco è esattamente lo stesso continuerà per attivare questo callback.
- Viene inserita una pagina, anche se non ne contiene di nuove articoli
- Una pagina viene eliminata, anche se è vuota (I272c9, b/189999634)
Correzioni di bug
- Accesso a PagedList.dataSource dal valore iniziale generato da LivePagedList o RxPagedList non genererà più erroneamente Eccezione illegale (I96707)
Versione 3.1.0-alpha01
2 giugno 2021
Viene rilasciato androidx.paging:paging-*:3.1.0-alpha01
. La versione 3.1.0-alpha01 contiene questi commit.
Modifiche alle API
- I corsi forniti da
paging-rxjava3
sono ora soggetti aandroidx.paging.rxjava3
pacchetto in modo da non entrare in conflitto conpaging-rxjava2
(Ifa7f6)
Correzioni di bug
- Risolto un problema per cui a volte Paging inviava operazioni autonomo in modo diverso in RecyclerView, il che potrebbe causare l'attivazione di alcuni listener in anticipo. (Ic507f, b/182510751)
Contributo esterno
- Sono state aggiunte le API compatibili di PagedList deprecate all'artefatto rxjava3 (Id1ce2, b/182497591)
Paging Compose versione 1.0.0
Versione 1.0.0-alpha20
24 maggio 2023
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha20
. La versione 1.0.0-alpha20 contiene questi commit.
Nuove funzionalità
- Paging Compose ora supporta l'anteprima di un elenco di dati falsi tramite la creazione di un
PagingData.from(fakeData)
e il wrapping diPagingData
in unMutableStateFlow
(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Utilizzando questi dati come input nel tuo@Preview
, le chiamate acollectAsLazyPagingItems()
fornirannoLazyPagingItems
in anteprima. (I8a78d, b/194544557)
Correzioni di bug
- I dati memorizzati nella cache da
pager.flow.cachedIn
raccolti inLazyPagingItems
saranno ora disponibili immediatamente dopo il ripristino dello stato senza richiedere la raccolta asincrona. Ciò significa che i dati memorizzati nella cache saranno pronti per la presentazione subito dopo la composizione iniziale, dopo il ripristino dello stato. (I97a60, b/177245496)
Versione 1.0.0-alpha19
3 maggio 2023
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha19
. La versione 1.0.0-alpha19 contiene questi commit.
Supporto di tutti i layout lenti
In precedenza, Paging Compose forniva estensioni items
e itemsIndexed
personalizzate su LazyListScope
, il che significava che non era possibile utilizzare Paging Compose con altri layout lenti come LazyVerticalGrid
, HorizontalPager
o altri componenti lenti personalizzati forniti dalle librerie Wear e TV. L'aggiornamento principale di questa release è quello di risolvere questa flessibilità.
Per supportare layout più lenti, dovevamo creare API a un livello diverso. Anziché fornire un'API items
personalizzata per ogni layout lento, Paging Compose ora fornisce metodi di estensione di livello leggermente inferiore su LazyPagingItems
in itemKey
e itemContentType
. Queste API sono incentrate sull'aiutarti a implementare i parametri key
e contentType
nelle API items
standard già esistenti per LazyColumn
e LazyVerticalGrid
e nei loro equivalenti in API come HorizontalPager
. (Ifa13b, Ib04f0, b/259385813)
Ciò significa che il supporto di LazyVerticalGrid
sarebbe simile a:
// 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)
}
}
Per altri esempi di utilizzo di queste nuove API, consulta i nostri esempi.
Anche se queste modifiche allungano di qualche riga gli esempi in LazyColumn
e LazyRow
, abbiamo ritenuto che la coerenza in tutti i layout lenti fosse un fattore importante per chi in futuro utilizzerà Paging Compose. Per questo motivo, le estensioni esistenti per LazyListScope
sono state ritirate. (I0c459, I92c8f, b/276989796)
Modifiche alle API
- Per facilitare la migrazione alle nuove API, le funzioni delle estensioni
items
eitemsIndexed
suLazyListScope
ora supportano un parametrocontentType
, che esegue il mirroring del supporto nelle nuove API. (Ib1918, b/255283378)
Aggiornamenti delle dipendenze
- Paging Compose ha aggiornato la sua dipendenza da Compose 1.0.5 a Compose 1.2.1. (Ib1918, b/255283378)
Versione 1.0.0-alpha18
8 febbraio 2023
androidx.paging:paging-compose:1.0.0-alpha18
viene rilasciato senza modifiche. La versione 1.0.0-alpha18 contiene questi commit.
Versione 1.0.0-alpha17
24 ottobre 2022
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha17
. La versione 1.0.0-alpha17 contiene questi commit.
Nuove funzionalità
- Aggiungi il supporto per un
CoroutineContext
personalizzato quando chiami il numerocollectLazyPagingItems
. (I7a574, b/243182795, b/233783862)
Versione 1.0.0-alpha16
10 agosto 2022
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha16
. La versione 1.0.0-alpha16 contiene questi commit.
Nuove funzionalità
- Il paging ora fornisce log tramite la classe
LazyPagingItems
per esporre le informazioni di debug raccolte da PagingData. - I log possono essere abilitati tramite il comando
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Correzioni di bug
- È stato corretto l'errore del costruttore
PagingDataDiffer
mancante quando si utilizzavapaging-compose:1.0.0-alpha15
conpaging-common:3.1.1
o versioni precedenti.(b/235256201,b/239868768)
Versione 1.0.0-alpha15
1 giugno 2022
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha15
. La versione 1.0.0-alpha15 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. (Idc878)
Correzioni di bug
- Ora
LazyPagingItems
impostaloadState
iniziale in modo che venga aggiornatoLoadState.Loading
. (I55043, b/224855902)
Versione 1.0.0-alpha14
13 ottobre 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha14
. La versione 1.0.0-alpha14 contiene questi commit.
Versione 1.0.0-alpha13
29 settembre 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha13
. La versione 1.0.0-alpha13 contiene questi commit.
Modifiche alle API
- La funzione
LazyPagingItems.snapshot()
è stata sostituita con la proprietàLazyPagingItems.itemSnapshotList
(Ie2da8) - L'elemento
LazyPagingItems.getAsState()
deprecato è stato rimosso (Ie65e4)
Versione 1.0.0-alpha12
21 luglio 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha12
. La versione 1.0.0-alpha12 contiene questi commit.
Modifiche alle API
items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
utilizzati per collegare il paging conLazyColumn/Row
ora accettano il parametro chiave dell'opzione che consente di specificare una chiave stabile che rappresenta l'elemento. Puoi leggere ulteriori informazioni sulle chiavi qui. (I7986d)- La funzione
lazyPagingItems.getAsState(index)
è ora deprecata. Usa invece il criteriolazyPagingItems[index]
. (I086cb, b/187339372)
Versione 1.0.0-alpha11
30 giugno 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha11
. La versione 1.0.0-alpha11 contiene questi commit.
Versione 1.0.0-alpha10
2 giugno 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha10
. La versione 1.0.0-alpha10 contiene questi commit.
Versione 1.0.0-alpha09
18 maggio 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha09
. La versione 1.0.0-alpha09 contiene questi commit.
Correzioni di bug
- LazyPagingItems itemCount e item getter sono ora osservabili, il che consente di utilizzarli anche con LazyVerticalGrid (Ie2446, b/171872064, b/168285687)
Compatibilità con Compose
androidx.paging:paging-compose:1.0.0-alpha09
è compatibile solo con Compose versione1.0.0-beta07
e successive.
Versione 1.0.0-alpha08
24 febbraio 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha08
. La versione 1.0.0-alpha08 contiene questi commit.
Aggiornato per l'integrazione con Compose 1.0.0-beta01.
Versione 1.0.0-alpha07
10 febbraio 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha07
. La versione 1.0.0-alpha07 contiene questi commit.
Aggiornato per l'integrazione con Compose alpha12.
Versione 1.0.0-alpha06
28 gennaio 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha06
. La versione 1.0.0-alpha06 contiene questi commit.
Correzioni di bug
Aggiornato in modo da dipendere da Compose 1.0.0-alpha11.
Versione 1.0.0-alpha05
13 gennaio 2021
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha05
. La versione 1.0.0-alpha05 contiene questi commit.
Aggiornamento eseguito in modo da dipendere da Compose 1.0.0-alpha10.
Versione 1.0.0-alpha04
16 dicembre 2020
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha04
. La versione 1.0.0-alpha04 contiene questi commit.
Correzioni di bug
- Sono state aggiornate le proprietà,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
per passare solo daLoading
aNotLoading
dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoading
per garantire aggiornamento remoto applicato. (I65619)
Versione 1.0.0-alpha03
2 dicembre 2020
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha03
. La versione 1.0.0-alpha03 contiene questi commit.
- Aggiornato in modo da corrispondere a Compose 1.0.0-alpha08.
Versione 1.0.0-alpha02
11 novembre 2020
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha02
. La versione 1.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Metodi
.peek()
,.snapshot()
,.retry()
e.refresh()
aggiunti aLazyPagingItem
che espongono le stesse funzionalità disponibili inAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
Versione 1.0.0-alpha01
28 ottobre 2020
Viene rilasciato androidx.paging:paging-compose:1.0.0-alpha01
. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
L'artefatto paging-compose
fornisce l'integrazione tra The Paging Library e Jetpack Compose. Un semplice esempio di utilizzo:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
Versione 3.0.1
Versione 3.0.1
21 luglio 2021
Viene rilasciato androidx.paging:paging-*:3.0.1
. La versione 3.0.1 contiene questi commit.
Correzioni di bug
- L'accesso a
PagedList.dataSource
dal valore iniziale generato daLivePagedList
oRxPagedList
non comporterà più erroneamente la generazione di un'eccezione illegale (I96707)
Versione 3.0.0
Versione 3.0.0
5 maggio 2021
Viene rilasciato androidx.paging:paging-*:3.0.0
. La versione 3.0.0 contiene questi commit.
Funzionalità principali di 3.0.0
La maggior parte dell'API esistente da Paging 2.x.x è stata deprecata in favore delle nuove API Paging 3 per introdurre i seguenti miglioramenti:
- Assistenza di alto livello per coroutine Kotlin e Flow
- Supporto per l'annullamento
- Indicatori di stato e di errore integrati
- Funzionalità Riprova e aggiorna
- Tutte e tre le sottoclassi DataSource sono state combinate in una classe PagingSource unificata
- Trasformazioni di pagina personalizzate, inclusa una integrata per l'aggiunta di separatori
- Caricamento di intestazioni e piè di pagina dello stato in corso...
Versione 3.0.0-rc01
21 aprile 2021
Viene rilasciato androidx.paging:paging-*:3.0.0-rc01
. La versione 3.0.0-rc01 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui a volte Paging inviava messaggi in modalità autonoma in RecyclerView, il che potrebbe causare l'attivazione di alcuni listener in anticipo. (Ic507f, b/182510751)
Versione 3.0.0-beta03
24 marzo 2021
Viene rilasciato androidx.paging:paging-*:3.0.0-beta03
. La versione 3.0.0-beta03 contiene questi commit.
Correzioni di bug
- Abbiamo aggiornato la modalità di gestione dei segnaposto quando l'elenco viene è stato ricaricato per evitare salti imprevisti in RecyclerView. Consulta: NullPaddingDiffing.md per i dettagli. (If1490, b/170027529, b/177338149)
- I vari builder di PagedList (percorso di compatibilità precedente) non chiamano più in modo sincrono
DataSource.Factory.create()
sul thread principale quando viene chiamato.build()
. (b/182798948)
Versione 3.0.0-beta02
10 marzo 2021
Viene rilasciato androidx.paging:paging-*:3.0.0-beta02
. La versione 3.0.0-beta02 contiene questi commit.
Modifiche alle API
- Le estensioni Rx3 ora si propagano correttamente
@ExperimentalCoroutinesApi
Requisito di attivazione. In precedenza erano contrassegnato sul metodo@get
, che viene ignorato dal compilatore Kotlin su: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Correzioni di bug
- Applicare restrizioni sull'uso pubblico delle API sperimentali (I6aa29, b/174531520)
- È stato corretto un bug che causava lo stato di
PagingState
semprenull
quando viene chiamato l'aggiornamento remoto. - È stato corretto un bug per cui le pagine vuote restituite da PagingSource potrebbero impedire il recupero di pagine vuote per completare
prefetchDistance
il blocco della funzionalità Paging.
Versione 3.0.0-beta01
10 febbraio 2021
Viene rilasciato androidx.paging:paging-*:3.0.0-beta01
. La versione 3.0.0-beta01 contiene questi commit.
Modifiche alle API
- I wrapper Rx2 e Rx3 ora espongono l'annotazione sperimentale
dipende da cosa dipende. Se utilizzi i wrapper compat Rx in paging-rxjava2 o
paging-rxjava3, ora dovrai annotare gli utilizzi con
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d)
Correzioni di bug
- È stato corretto il problema di
IndexOutOfBoundsException: Inconsistency detected
generato a volte durante l'utilizzo delle APIDataSource
v2 tramite percorsi di compatibilità - La chiamata
isInvalid
durante l'inizializzazione diDataSource
quando utilizzata tramite percorsi di compatibilità viene ora avviata correttamente su fetchDispatcher anziché sul thread principale. Viene corretto unIllegalStateException
dovuto all'accesso al database sul thread principale durante l'utilizzo dell'implementazionePagingSource
della stanza virtuale.
Versione 3.0.0-alpha13
27 gennaio 2021
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha13
. La versione 3.0.0-alpha13 contiene questi commit.
Modifiche alle API
- L'implementazione di
PagingSource.getRefreshKey
non è più facoltativa, ora è una funzione astratta senza un'implementazione predefinita. Gli utenti che eseguono la migrazione possono continuare a restituire l'impostazione predefinita che restituisce semplicementenull
, magetRefreshKey()
un'implementazione reale che restituisca una chiave basata sul posizione di scorrimento attuale che consente di continuare il caricamento del paging centrata intorno all'area visibile tramitePagingState.anchorPosition
se possibile. (I4339a) InvalidatingPagingSourceFactory
è ora un corso finale (Ia3b0a)- Consenti la configurazione del separatore di terminale (intestazione / piè di pagina)
il comportamento con un parametro facoltativo SeparatorType. I due
sono:
FULLY_COMPLETE
- comportamento esistente; attendono sia PagingSource che RemoteMediator per contrassegnare endOfPaginationReached prima di aggiungere il terminale separatori. Se non viene utilizzato RemoteMediator, il comando loadState remoto è ignorato. Ciò è utile soprattutto se vuoi mostrare solo la sezione separatori quando la sezione è completamente caricata, incluso il recupero da fonte remota, ad esempio la rete.SOURCE_COMPLETE
: attendi solo che venga contrassegnato con PagingSource endOfPaginationRaggiungied anche se si utilizza RemoteMediator. Ciò consente intestazioni e piè di pagina da presentare in modo sincrono con che impedisce agli utenti di scorrere per vedere il separatori. (Ibe993, b/174700218)
Correzioni di bug
- È stata corretta una rara perdita di memoria che si verifica quando un file PagingSource non valido prima ancora che PageFetcher possa iniziare a caricarsi. (I9606b, b/174625633)
Versione 3.0.0-alpha12
13 gennaio 2021
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha12
. La versione 3.0.0-alpha12 contiene questi commit.
Modifiche alle API
- InvalidatingPagingSourceTransform non è più una classe astratta dato che non ha mai avuto metodi astratti. (I4a8c4).
- Aggiunto un sovraccarico di .cachedIn() che accetta ViewModel anziché Lifecycle o CoroutineScope per gli utenti Java. (I97d81, b/175332619)
- Consenti ai chiamanti Java di utilizzare le operazioni di trasformazione PagingData in
in modo asincrono, accettando un Executor in un operatore di trasformazione
argomenti. Tutti gli operatori di trasformazione -Sync hanno il suffisso -Sync
rimosso ora e gli utenti di Kotlin Coroutine dovranno distinguersi
chiamando la funzione di estensione, che invece accetta un blocco di sospensione.
Tutti gli operatori di trasformazione PagingData sono stati spostati nelle estensioni
nella classe statica PagingDataTransforms. Gli utenti Java dovranno
e chiamarli tramite helper statici, ad es.
PagingDataTransforms.map(pagingData, transform)
Per gli utenti Kotlin, la sintassi è la stessa, ma dovrai importare personalizzata. (If6885, b/172895919)
Correzioni di bug
- È stato corretto un bug per cui
RemoteMediator.load()
non veniva chiamato duranteadapter.refresh()
se era già stata raggiunta la fine dell'impaginazione.
Versione 3.0.0-alpha11
16 dicembre 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha11
. La versione 3.0.0-alpha11 contiene questi commit.
Nuove funzionalità
- Supporto dello stato salvato aggiunto per i seguenti casi d'uso di base (il supporto completo, soprattutto nel caso di origine a più livelli, è ancora in fase di sviluppo):
- il flusso viene memorizzato nella cache e l'applicazione non viene interrotta (ad esempio, il flusso viene memorizzato nella cache in un modello di visualizzazione e l'attività viene ricreata durante il processo)
- l'origine di paging viene conteggiata, i segnaposto sono abilitati e il layout non sfalsato.
Modifiche alle API
- Ora l'API
PagingSource.getRefreshKey()
è stabile (I22f6f, b/173530980) PagingSource.invalidate
non è più una funzione aperta. Se ricevi una notifica in caso di invalidazione, valuta la possibilità di chiamare Il metodo registryConfirmatedCallback invece di eseguire l'override di invalidate. (I628d9, b/173029013, b/137971356)- Pager ora ha un singolo costruttore sperimentale insieme al con i normali costruttori, piuttosto che utilizzare le API sperimentali API pubblica non sperimentale tramite l'annotazione di attivazione. (I9dc61, b/174531520)
- Sono state aggiornate le proprietà,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
per passare solo daLoading
aNotLoading
dopo che gli stati di caricamento del mediatore e della sorgente sonoNotLoading
per garantire aggiornamento remoto applicato. (I65619) Il parametro LoadParams.pageSize è stato rimosso (era già stato rimosso) ritirato). È consigliabile utilizzare
LoadParams.loadSize
in PagingSource.LoadParams.loadSize
è sempre uguale aPagingConfig.pageSize
tranne che per la chiamata di caricamento iniziale, dove è uguale alPagingConfig.initialLoadSize
.Se stai testando Paging2 DataSource senza utilizzare un pager o Elenco di pagine,
pageSize
potrebbe non corrispondere aPagingConfig.pageSize
se stai impostando ancheinitialLoadSize
. Se è importante per il tuo prova a usare un Pager/PagedList che verrà impostato internamente il valore di PageSize corretto per i metodi di caricamento DataSource. (I98ac7, b/149157296)
Correzioni di bug
- È stato corretto un arresto anomalo a causa di LegalStateException quando utilizzando separatori con PagingConfig.maxSize impostato. (I0ed33, b/174787528)
- È stato corretto un bug per cui lo stato di caricamento di PREPEND / APPEND non veniva eseguito
aggiorna subito a
NotLoading(endOfPaginationReached = true)
dopo il caricamento iniziale se è stato impostato RemoteMediator (I8cf5a) - È stato corretto un bug per cui le API lato presentatore, come .snapshot(), .peek() e così via, restituivano l'elenco precedente (non aggiornato) negli aggiornamenti di ListUpdateCallback.
- È stato corretto un bug per cui gli operatori di separazione non aggiungevano intestazioni o piè di pagina se utilizzati con RemoteMediator
- Correzione di un bug per cui gli aggiornamenti di LoadState a NotLoading per RemoteMediator rimanevano bloccati nello stato di caricamento
- È stato corretto un bug per cui l'API di compatibilità Paging2.0,
.asPagingSourceFactory()
, poteva causare l'inizializzazione diDataSource
di supporto sul CoroutineDispatcher errato. In questo modo si risolvono un arresto anomalo e possibili casi di ANR, soprattutto quando si utilizza l'attuale implementazione di PagingSource di Room, che usa questo percorso di compatibilità.
Versione 3.0.0-alpha10
2 dicembre 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha10
. La versione 3.0.0-alpha10 contiene questi commit.
Modifiche alle API
Le API
dataRefreshFlow
edataRefreshListener
deprecate sono state rimosse poiché sono ridondanti con gli aggiornamenti loadStateFlow / Listener. Per quelle sottoposte a migrazione, l'equivalente loadStateFlow è:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Correzioni di bug
- endOfPaginationReached for RemoteMediator
REFRESH
adesso propagarsi correttamente agli aggiornamenti LoadState e impedisce le retiAPPEND
PREPEND
dall'attivazione. (I94a3f, b/155290248) - Viene presentato un elenco vuoto a causa di una pagina iniziale vuota
L'utilizzo intensivo dei filtri non impedirà più l'avvio del Rilevamento di
PREPEND
oAPPEND
. (I3e702, b/168169730) - Risolto un problema per cui non veniva chiamata
getRefreshKey
generazioni successive di PagingSource quando le invalidazioni avvengono rapidamente. (I45460, b/170027530)
Contributo esterno
- È stata aggiunta una nuova classe astratta InvalidatingPagingSource Fabbrica
con un'API
.invalidate()
che inoltra la convalida a tutti i PagingSources che emette. Grazie a @claraf3! (Ie71fc, b/160716447)
Problemi noti
- Le intestazioni e i piè di pagina della trasformazione .insertSeparators() potrebbero non essere visualizzati immediatamente quando si utilizza RemoteMediator b/172254056
- L'utilizzo di RemoteMediator può causare il blocco di
LoadState
remoto in caso di invalidazione ePagingSource.load(LoadParams.Refresh(...))
prima cheRemoteMediator.load()
restituisca b/173717820
Versione 3.0.0-alpha09
11 novembre 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha09
. La versione 3.0.0-alpha09 contiene questi commit.
Modifiche alle API
- Ritira completamente i metodi dataRefreshFlow / Listener con un sostituzione con clausola. (I6e2dd).
Correzioni di bug
- Correzione del problema
IllegalArgumentException
generato quando si utilizzavano separatori con RemoteMediator e si attivava un invalidamento mentre è ancora in esecuzione un caricamento remoto che restituisce endOfPagination (I3a260)
Versione 3.0.0-alpha08
28 ottobre 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha08
. La versione 3.0.0-alpha08 contiene questi commit.
Modifiche alle API
- Le varianti Kotlin / Java di
DataSource.InvalidatedCallback
che sono stati combinati abilitando le conversioni SAM in Kotlin tramite (disponibile in Kotlin 1.4). Inoltre, è stato corretto un bug che causava La variante kotlin dei callback invalidi non è stata chiamata dopo la trasformazione di.map
o.mapByPage
. (I1f244, b/165313046)
Correzioni di bug
- L'interazione di Paging con ViewPager è stata notevolmente migliorata. Nello specifico, il paging non annullerà più una chiamata
RemoteMediator#load
a causa dell'annullamento della convalida di una pagina. Inoltre, non verrà più effettuata una richiesta di aggiunta/preposizione di caricamento, se è necessario AGGIORNARE, fino a quando la richiesta non viene completata correttamente. (I6390b, b/162252536) - Il controllo lint delle API per MissingGetterMatchingBuilder è abilitato per Androidx (I4bbea, b/138602561)
- È stato corretto un bug per cui gli aiutanti
.withLoadState*
ConcatAdapter
arresto anomalo dovuto alla notifica a RecyclerView dal thread in background (I18bb5, b/170988309) - È stato corretto un bug per cui il caricamento di una pagina non vuota molto piccola a volte impediva l'attivazione corretta del caricamento tramite precaricamento.Iffda3 b/169259468
Versione 3.0.0-alpha07
1° ottobre 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha07
. La versione 3.0.0-alpha07 contiene questi commit.
Modifiche alle API
- Gli operatori Async PagingData basati su Guava ora accettano un esecutore come parametro, per controllare il contesto di esecuzione. (ID4372)
Correzioni di bug
- Correzione dell'eccezione IndexOutOfBounds generata in RemoteMediator dovuta in una condizione di gara. (I00b7f, b/165821814)
- È stata corretta una condizione di gara in DataSource -> Conversione di PagingSource che potrebbe far sì che l'oggetto PagingSource risultante ignori gli indicatori di invalidazione provenienti da DataSource.
- Risolto un problema nella logica di fetchin della pagina che a volte impediva il rilevamento di nuove generazioni di PagingSource fino al richiamo di PagingDataAdapter.refresh()
- Risolto un problema che a volte causava la perdita della posizione di scorrimento durante l'utilizzo di un oggetto DataSource convertito in PagingSource (come quello prodotto da Room), insieme a RemoteMediator
Contributo esterno
- Grazie a @simonschiller per aver aggiunto gli operatori di trasformazione asincrona basati su RxJava2, RxJava3 e Guava per PagingData.
Versione 3.0.0-alpha06
2 settembre 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha06
. La versione 3.0.0-alpha06 contiene questi commit.
Modifiche alle API
UnsupportedOperationException
con messaggi più chiari in merito la mancanza di supporto per gli ID stabili viene ora generata ogni voltaPagingDataAdapter.setHasStableIds
ha chiamato. (Ib3890, b/158801427)
Correzioni di bug
- insertSeparators non filtra più le pagine vuote consentendo distanza di precaricamento che il presentatore deve rispettare anche nei casi in cui vengono inserite molte pagine vuote. (I9cff6, b/162538908)
Versione 3.0.0-alpha05
19 agosto 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha05
. La versione 3.0.0-alpha05 contiene questi commit.
Correzioni di bug
- Il paging ora precarica correttamente le pagine anche quando i dati presentati sono molto filtrati
- La restituzione di
LoadResult.Error
a un nuovo tentativo di caricamento non comporta più la riattivazione errata degli accessi all'elemento.
Contributo esterno
- Grazie a Clara F per aver contribuito a risolvere alcuni test. (549612)
Versione 3.0.0-alpha04
5 agosto 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha04
. La versione 3.0.0-alpha04 contiene questi commit.
Modifiche alle API
- È stata aggiunta l'API
peek()
aAsyncPagingDataDiffer
ePagingDataAdapter
per consentire l'accesso ai dati presentati senza la pagina di attivazione viene caricato automaticamente. (I38898, b/159104197) - È stata aggiunta un'API
snapshot()
aPagingDataAdapter
eAsyncPagingDataDiffer
per consentire il recupero degli elementi presentati senza che attivano il recupero della pagina. (I566b6, b/159104197) - È stato aggiunto un costruttore
PagingData.from(List<T>)
per consentire presentando elenchi statici, che possono essere combinati con il Flusso PagingData per mostrare elenchi statici in determinati stati, ad esempio prima il REFRESH iniziale viene completato o semplicemente per testare le trasformazioni. (ID134d) - Ritira le API dataRefresh Flow / Listener così come erano il cui scopo è esporre lo stato degli elementi presentati su REFRESH, ma con miglioramenti al tempo di callback loadState Flow / Listener e proprietà itemCount, è ridondante (Ia19f3)
- Sono stati aggiunti wrapper di compatibilità RxJava3 per
PagingSource
eRemoteMediator
(I49ef3, b/161480176)
Correzioni di bug
PositionalDataSource
convertito inPagingSource
tramite AssistentetoPagingSourceFactory
, di cuiPagingSource
generati dalla stanza ora correttamente contraddistinguersi per supportare il salto. (I3e84c, b/162161201)- È stato corretto un bug per cui veniva utilizzata la variante sincrona di sendData
a volte può portare a una gara che causa un
ClosedSendChannelException
(I4d702, b/160192222)
Contributo esterno
- Grazie a Zac Sweers per aver aggiunto wrapper di compatibilità RxJava3 per conto di Slack. (I49ef3, b/161480176)
Versione 3.0.0-alpha03
22 luglio 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha03
. La versione 3.0.0-alpha03 contiene questi commit.
Modifiche alle API
- Il costruttore per PagingState è ora pubblico, il che dovrebbe semplificare le implementazioni di test di getRefreshKey() (I8bf15)
- Ha nascosto le varianti della funzione di mappatura di kotlin DataSource da Java, a risolvere le ambiguità tra la variante originale e la variante Kotlin. (If7b23, b/161150011)
- Le API ridondanti intese come comodità per gli utenti Kotlin è stato contrassegnato come @JvmSynthetic (I56ae5)
- Sovraccarico aggiunto per il costruttore di LoadResult.Page che imposta il valore predefinito di itemsBefore e di itemsAfter su COUNT_UNDEFINED (I47849)
- Gli operatori PagingData esistenti accettano i metodi di sospensione e abbiamo introdotto le nuove funzionalità mapSync, flatMapSync e filterSync per gli utenti Java. I metodi di trasformazione esistenti sono stati sono state spostate nelle funzioni delle estensioni, quindi gli utenti Kotlin ora dovranno importarle. (I34239, b/159983232)
Correzioni di bug
- Room (e PositionalDataSource) PagingSources ora visualizza un separatore iniziale nella prima pagina, in modo che l'utente non ha bisogno di scorrere per visualizzarla. (I6f747, b/160257628)
- L'elemento accede ai segnaposto ora attivare correttamente il caricamento di PagingSource finché restituita in una pagina che soddisfi l'indice richiesto dopo essere stato trasformato da PagingData.filter() (I95625, b/158763195)
- Correzione di un bug per cui a volte scorrere il testo dopo PagingSource restituisce un errore che potrebbe impedire PagingDataAdapter.retry() di riprovare. (I1084f, b/160194384)
- Risolto un problema per cui l'elemento accede dopo aver rilasciato una pagina non carica le pagine anche se l'accesso all'elemento si trovava entro prefetchDistance (Ie95ae, b/160038730)
- L'impostazione di PagingConfig.maxSize non abilita più i segnaposto Dopo un evento di rilascio (I2be29, b/159667766)
Versione 3.0.0-alpha02
24 giugno 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha02
. La versione 3.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti sovraccarichi per il costruttore di
PagingConfig
con valori predefiniti comuni (I39c50, b/158576040) - Sono stati aggiunti sovraccarichi per i costruttori di
PagingDataAdapter
eAsyncPagingDataDiffer
con valori predefiniti comuni (Ie91f5) - Le API dell'adattatore,
dataRefreshFlow
edataRefreshListener
ora passa un valore booleano per segnalare se unPagingData
è vuoto (I6e37e, b/159054196) - Sono state aggiunte le API RxJava e Guava per RemoteMediator - RxRemoteMediator e ListenableFutureRemoteMediator
- Sono stati aggiunti helper a PagingState per l'accesso agli elementi comuni come
isEmpty()
efirstItemOrNull()
(I3b5b6, b/158892717)
Correzioni di bug
- Cercapersone ora controlla la presenza di riutilizzo di PagingSource in fabbrica, per impedire il riutilizzo accidentale di PagingSources non validi, generando un errore non chiaro (I99809, b/158486430)
- Gli errori di RemoteMediator REFRESH non impediscono più il caricamento di PagingSource (I38b1b, b/158892717)
- La versione non in sospensione di
submitData
non causa più un arresto anomalo a causa di una raccolta simultanea su piùPagingData
quando dopo la sospensione disubmitData
. (I26358, b/158048877) - È stato risolto il problema "Impossibile raccogliere due volte dal pager" eccezione che potrebbe verificarsi dopo la modifica della configurazione (I58bcc, b/158784811)
Versione 3.0.0-alpha01
10 giugno 2020
Viene rilasciato androidx.paging:paging-*:3.0.0-alpha01
. La versione 3.0.0-alpha01 contiene questi commit.
La libreria di paging è stata aggiornata alla versione 3.0 per abilitare diverse nuove importanti funzionalità.
Nuove funzionalità di 3.0
- Assistenza di alto livello per coroutine Kotlin e Flow.
- Supporto per il caricamento asincrono con le funzioni di sospensione delle coroutine, le primitive RxJava Single o Guava ListenableFuture.
- Indicatori di stato e errore integrati per la progettazione reattiva di UI, tra cui la funzionalità di ripetizione e aggiornamento.
- Miglioramenti al livello del repository
- Interfaccia dell'origine dati semplificata
- Impaginazione semplificata di rete + database
- Assistenza per l'annullamento
- Miglioramenti al livello di presentazione
Problemi noti
- I documenti Java di paging di 3 non sono ancora disponibili. Nel frattempo, utilizza le guide ai link riportati sopra o la documentazione Kotlin. (b/158614050)
Versione 2.1.2
Versione 2.1.2
18 marzo 2020
Viene rilasciato androidx.paging:paging:2.1.2
. La versione 2.1.2 contiene questi commit rispetto alla 2.1.0.
Correzioni di bug
- Correzione per
IndexOutOfBoundsException
in rari casi durante la conversione di una posizione durante l'annullamento della convalida.
Problema con la release
La versione di paging
2.1.1
è stata rilasciata in modo errato da un ramo configurato in modo errato, esponendo API e funzionalità parzialmente implementate in futuro in una release futura.Il Paging
2.1.2
contiene la correzione di centratura del caricamento originariamente rilasciata nella versione 2.1.1, ma questa volta correttamente è stata selezionata in cima alla release 2.1.0. Ti consigliamo vivamente di eseguire l'upgrade a questa release se stai usando la versione 2.1.1.
Versione 2.1.1
Versione 2.1.1
18 dicembre 2019
Viene rilasciato androidx.paging:paging-*:2.1.1
. La versione 2.1.1 contiene questi commit.
Correzioni di bug
- I caricamenti iniziali contigui da PositionalDataSources ora sono incentrati sull'ultimo accesso quando i segnaposto sono disattivati
Versione 2.1.0
Versione 2.1.0
25 gennaio 2019
Il paging di 2.1.0
viene rilasciato senza modifiche da 2.1.0-rc01
.
Versione 2.1.0-rc01
6 dicembre 2018
L'impaginazione di 2.1.0-rc01
viene rilasciata senza modifiche da 2.1.0-beta01
.
Versione 2.1.0-beta01
1 novembre 2018
L'impaginazione di 2.1.0-beta01
viene rilasciata senza modifiche da 2.1.0-alpha01
.
Versione 2.1.0-alpha01
12 ottobre 2018
Il Paging di 2.1.0-alpha01
presenta due importanti aggiunte: l'eliminazione di pagine e le librerie di estensioni KTX per ogni artefatto, oltre a diverse altre modifiche API e correzioni di bug.
Modifiche alle API
- È stato aggiunto
PagedList.Config.Builder.setMaxSize()
per limitare il numero di elementi caricati in memoria. androidx.paging.Config()
aggiunta come alternativa a Kotlin perPagedList.Config.Builder
androidx.paging.PagedList()
aggiunta come alternativa a Kotlin perPagedList.Builder
DataSourceFactory.toLiveData()
aggiunta come alternativa a Kotlin perLivePagedListBuilder
DataSourceFactory.toObservable()
etoFlowable()
aggiunte come alternative a Kotlin perRxPagedListBuilder
AsyncPagedListDiffer.addPagedListListener()
aggiunto per l'ascolto quando PagedList viene scambiato. b/111698609- È stata aggiunta
PagedListAdapter.onCurrentListChanged()
variante che supera l'elenco vecchio e nuovo, variante precedente deprecata. - Sono state aggiunte
PagedListAdapter/AsyncPagedListDiffer.submitList()
varianti che richiedono un callback aggiuntivo che si attiva se/quando l'elenco di pagine viene visualizzato dopo le differenze. In questo modo puoi sincronizzare uno scambio PagedList con altri aggiornamenti dell'interfaccia utente. B/73781068 PagedList.getLoadedCount()
aggiunto per farti sapere quanti elementi ci sono. Tieni presente che il valore restituito è sempre uguale a.size()
se i segnaposto sono disabilitati.
Correzioni di bug
- È stata corretta una condizione di gara durante la differenza se gli elenchi vengono riutilizzati b/111591017
PagedList.loadAround()
ora generaIndexOutOfBoundsException
quando l'indice non è valido. In precedenza, poteva arrestarsi in modo anomalo con un'altra eccezione poco chiara.- È stato risolto il problema per cui una dimensione del caricamento iniziale estremamente ridotta insieme a dati invariati avrebbe comportato l'assenza di ulteriori caricamenti b/113122599
Versione 2.0.0
Versione 2.0.0
1° ottobre 2018
La funzionalità di impaginazione di 2.0.0
viene rilasciata con una singola correzione di bug.
Correzioni di bug
- È stato risolto un arresto anomalo che poteva verificarsi durante lo scorrimento molto veloce utilizzando
PositionalDataSource
e i segnaposto b/114635383.
Versione 2.0.0-beta01
2 luglio 2018
Correzioni di bug
- È stato corretto il contenuto che scompariva in alcuni casi anteposti (segnaposto disattivati, PositionalDataSource) b/80149146
- (Già rilasciato in
1.0.1
) Sono stati risolti gli arresti anomali in cuiPagedListAdapter
eAsyncPagedListDiffer
non segnalavano eventi di spostamento. b/110711937
Dipendenze precedenti ad AndroidX
Per le versioni pre-AndroidX di Paging che seguono, includi queste dipendenze:
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"
}
Versione 1.0.1
Versione 1.0.1
26 giugno 2018
La funzionalità di impaginazione di 1.0.1
viene rilasciata con una singola correzione di bug in runtime
. Ti consigliamo vivamente di utilizzare 1.0.1
per una maggiore stabilità. Viene rilasciato anche il Paging RxJava2 1.0.1
, identico a 1.0.0-rc1
.
Correzioni di bug
- È stato risolto il problema degli arresti anomali in cui
PagedListAdapter
eAsyncPagedListDiffer
non segnalavano gli eventi di movimento. B/110711937
RxJava2 Versione 1.0.0
RxJava2 Versione 1.0.0-rc1
16 maggio 2018
Il Paging di RxJava2 1.0.0-rc1
si sta spostando verso la release candidata senza modifiche rispetto alla versione iniziale
alfa.
Versione 1.0.0
Versione 1.0.0-rc1
19 aprile 2018 Candidato per la release di paging
Non abbiamo altri problemi noti o nuove funzionalità in programma per il
Paging della release 1.0.0
. Esegui l'upgrade dei progetti per utilizzare 1.0.0-rc1
e
aiutaci a testarla in battaglia in modo da poter spedire un 1.0.0
solido come una roccia.
Non sono state apportate modifiche in questa release, è uguale a 1.0.0-beta1
.
Versione 1.0.0-beta1
5 aprile 2018
Il paging sarà in versione beta per un breve periodo prima di procedere alla release candidato.
Non stiamo pianificando ulteriori modifiche all'API per il seguente paese: Paging 1.0
e la soglia per qualsiasi modifica all'API è molto elevata.
Il supporto di Alpha RxJava2 per il paging viene rilasciato come modulo facoltativo separato (android.arch.paging:rxjava2:1.0.0-alpha1
)
e verrà sottoposto temporaneamente al controllo
delle versioni fino alla stabilizzazione.
Questa nuova libreria fornisce un'alternativa RxJava2 a LivePagedListBuilder
, in grado di creare
Observable
e Flowable
, con Scheduler
anziché Executor
:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
Nuove funzionalità
RxPagedListBuilder
è stato aggiunto tramite il nuovo artefattoandroid.arch.paging:rxjava2
.
Modifiche alle API
Modifiche all'API per chiarire il ruolo degli esecutori nei builder:
setBackgroundThreadExecutor()
rinominato insetFetchExecutor()
(inPagedList.Builder
eLivePagedListBuilder
)setMainThreadExecutor()
è stato rinominato insetNotifyExecutor()
(inPagedList.Builder
).
È stato corretto il problema di privato
PagedList.mCallbacks
membro.
Correzioni di bug
LivePagedListBuilder
attiva il caricamento inizialePagedList
sull'esecutore specificato, anziché il pool di thread di I/O di Arch Components.È stato corretto il comportamento di invalidazione nei wrapper
DataSource
interni (utilizzati per implementareDataSource.map
, nonché il caricamento diPositionalDataSource
disattivato con segnaposto) b/77237534
Versione 1.0.0-alpha7
21 marzo 2018
La funzionalità di ricerca in pagine 1.0.0-alpha7
viene rilasciata insieme a Cicli di vita 1.1.1
. Poiché la funzione Paging alpha7 dipende dallo spostamento della classe Function
sopra menzionata, dovrai aggiornare la dipendenza lifecycle:runtime
in android.arch.lifecycle:runtime:1.1.1
.
È prevista la release finale di Paging alpha7
prima che diventi beta.
Modifiche alle API
- Gli oggetti
DataSource.LoadParams
hanno ora un costruttore pubblico, mentre gli oggettiDataSource.LoadCallback
sono astratti. In questo modo è possibile eseguire il wrapping di unDataSource
o testare direttamente unDataSource
con un callback di simulazione. b/72600421 - Mapper per DataSource e DataSource.FA
map(Function<IN,OUT>)
ti consente di trasformare, aggregare o decorare i risultati caricati da unDataSource
.mapByPage(<List<IN>,List<OUT>>)
abilita lo stesso per l'elaborazione batch (ad esempio, se gli elementi caricati da SQL devono eseguire query aggiuntive su un database separato, che può essere eseguito come batch).
PagedList#getDataSource()
aggiunto come metodo pratico b/72611341- Tutte le classi deprecate sono state rimosse dall'API, inclusi i resti del pacchetto
recyclerview.extensions
eLivePagedListProvider
. DataSource.Factory
è stato modificato da interfaccia a classe astratta per abilitare la funzionalità della mappa.
Correzioni di bug
- I Builder sono stati modificati in finale. B/70848565
- L'implementazione della stanza
DataSource
è ora corretta per gestire le query su più tabelle. Questa correzione è contenuta nella stanza 1.1.0-beta1, vedi sopra. - È stato corretto un bug per cui
BoundaryCallback.onItemAtEndLoaded
non veniva richiamato perPositionalDataSource
se i segnaposto sono abilitati e la dimensione totale è un multiplo esatto delle dimensioni della pagina.
Versione 1.0.0-alpha5
22 gennaio 2018
Correzioni di bug
- Risolvere i problemi di caricamento delle pagine quando i segnaposto sono disattivati b/70573345
- Logging aggiuntivo per il rilevamento del bug LegalArgumentException b/70360195 (e correzione speculativa lato stanza)
- Correzioni del codice di esempio Javadoc b/70411933, b/71467637