Paging
Questa tabella elenca tutti gli artefatti nel gruppo androidx.paging
.
Elemento | Release stabile | Candidato per la release | Versione beta | Release alpha |
---|---|---|---|---|
paging-* | 3.3.0 | - | - | - |
paging-comporre | 3.3.0 | - | - | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza a Paging, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle
per
l'app o il modulo:
Trendy
dependencies { def paging_version = "3.3.0" 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.0" }
Kotlin
dependencies { val paging_version = "3.3.0" 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.0") }
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione ktx.
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione di Issue Tracker.
Versione 3.3
Versione 3.3.0
14 maggio 2024
androidx.paging:paging-*:3.3.0
viene rilasciato. 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 sulla base diPagingDataPresenter
anziché richiedere API Paging interne oAsyncPagingDataDiffer
dipaging-runtime
.- Sono stati aggiunti nuovi metodi helper
LoadStates
eCombinedLoadStates
inhasError
eisIdle
per verificare seLoadStates
è rispettivamente in stato Errore oNotLoading
. SuFlow<CombinedLoadStates>
è stato anche aggiunto un nuovo metodo di estensione di KotlinawaitNotLoading()
, che attende che un carico sia impostato sullo statoNotLoading
o Errore. PagingData.empty()
ora inviaNotLoading
stati per impostazione predefinita, a meno che non vengano passatiLoadStates
personalizzati al suo costruttore. Si discosta dal comportamento esistente in cui non inviaLoadStates
quando viene inviato a unPagingDataAdapter
o invia gli stati di caricamento quando viene raccolto comeLazyPagingItems
. Quando viene raccolto comeLazyPagingItems
, ora mostrerà anche un elenco vuoto subito dopo la composizione iniziale.
Compatibilità multipiattaforma Kotlin
Il paging ora invia artefatti compatibili con Kotlin Multiplatform, in gran parte grazie al lavoro upstreaming del progetto multiplatform-paging di CashApp.
paging-common
ha spostato tutte le API Paging 3 incommon
ed è ora compatibile con Jvm e iOS, oltre che con 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 proprio codice incommon
e spedisce un artefatto Android, in linea con il supporto multipiattaforma diandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
rimarranno solo 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
androidx.paging:paging-*:3.3.0-alpha05
viene rilasciato. La versione 3.3.0-alpha05 contiene questi commit.
Modifiche alle API
- Il paging ora utilizza l'annotazione AndroidX Annotation
@MainThread
per il codice comune. (I78f0d, b/327682438).
Versione 3.3.0-alpha04
6 marzo 2024
androidx.paging:paging-*:3.3.0-alpha04
viene rilasciato. 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 di Kotlin. (aosp/2950785)
Versione 3.3.0-alpha03
7 febbraio 2024
androidx.paging:paging-*:3.3.0-alpha03
viene rilasciato. La versione 3.3.0-alpha03 contiene questi commit.
Nuove funzionalità
PagingDataPresenter
ora è un corso pubblico. I presentatori multipiattaforma ora possono essere creati sulla base diPagingDataPresenter
anziché richiedere API Paging interne oAsyncPagingDataDiffer
dipaging-runtime
. (Id1f74, b/315214786).- Sono stati aggiunti nuovi metodi helper
LoadStates
eCombinedLoadStates
per verificare seLoadStates
è in stato Errore oNotLoading
. È stata aggiunta anche una nuova API che è in attesa suLoadStateFlow
fino a quando un carico non diventaNotLoading
o Errore. (Id6c67)
Modifica del comportamento
PagingData.empty()
ora inviaNotLoading
stati per impostazione predefinita, a meno che non vengano passatiLoadStates
personalizzati al suo costruttore. Si discosta dal comportamento esistente in cui non inviaLoadStates
quando viene inviato a unPagingDataAdapter
o invia gli stati di caricamento quando viene raccolto comeLazyPagingItems
. Quando viene raccolto comeLazyPagingItems
, ora mostrerà anche un elenco vuoto subito dopo la composizione iniziale. (I4d11d, b/301833847).
Versione 3.3.0-alpha02
20 settembre 2023
androidx.paging:paging-*:3.3.0-alpha02
viene rilasciato. La versione 3.3.0-alpha02 contiene questi commit.
Compatibilità multipiattaforma Kotlin
Il paging ora invia artefatti compatibili con Kotlin Multiplatform, in gran parte grazie al lavoro upstreaming 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 che con 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 proprio codice incommon
e spedisce un artefatto Android, in linea con il supporto multipiattaforma diandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
rimarranno solo Android.
Modifiche alle API
- L'interfaccia pubblica Logger destinata esclusivamente all'uso interno è stata ritirata (I16e95, b/288623117)
Contributi esterni
- Grazie veyndan di Cash App per aver contribuito al trasferimento di Paging a Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #5,08#28}#579#28,#28{/10
Versione 3.3.0-alpha01
20 settembre 2023
- Questa è la prima release multipiattaforma delle librerie androidx.paging. Questa versione ha solo gli artefatti
*-jvm
e*-android
. Per le varianti macOS, iOS e Linux, utilizza3.3.0-alpha02
.
Versione 3.2
Versione 3.2.1
6 settembre 2023
androidx.paging:paging-*:3.2.1
viene rilasciato. La versione 3.2.1 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui l'API
asSnapshot()
dell'artefatto Test di paging si bloccava quando passava un flusso creato utilizzandoPagingData.from(List)
poichéasSnapshot()
non avrebbe informazioni su al termine del caricamento (a differenza dell'overloadPagingData.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) - Ora Scrittura paging utilizza internamente
AndroidUiDispatcher.Main
per garantire che i nuovi dati siano disponibili nello stesso frame in cui viene completato il caricamento. (Ia55af)
Versione 3.2.0
26 luglio 2023
androidx.paging:paging-*:3.2.0
viene rilasciato. La versione 3.2.0 contiene questi commit.
Modifiche importanti dalla versione 3.1.0
- La funzionalità Paging Compose ha raggiunto la stabilità dell'API ed è stata fusa con il resto di Paging, dove la sua versione ora corrisponde a tutti gli altri artefatti di Paging. Le modifiche dalla versione 3.1.0 includono:
- Supporto per la visualizzazione in anteprima di un elenco di dati falsi tramite la creazione di un
PagingData.from(fakeData)
e il wrapping diPagingData
inMutableStateFlow
(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Trasmetti questo flusso a@Preview
elementi componibili come destinatario percollectAsLazyPagingItems()
per l'anteprima. - Supporto di tutti i layout lenti come
LazyVerticalGrid
eHorizontalPager
, nonché di componenti lenti personalizzati dalle librerie Wear e TV. Questo risultato è stato possibile tramite i nuovi metodi di estensioneLazyPagingItems
itemKey
eitemContentType
di livello inferiore, che consentono di implementare i parametrikey
econtentType
nelle APIitems
standard già esistenti perLazyColumn
,LazyVerticalGrid
e nei loro equivalenti nelle API comeHorizontalPager
. items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
, che supportano soloLazyListScope
, sono stati deprecati.
- Supporto per la visualizzazione in anteprima di un elenco di dati falsi tramite la creazione di un
- Il nuovo artefatto
paging-testing
, che fornisce API progettate per testare le unità di ogni livello dell'app e la sua integrazione con le Paging in isolamento. Ad esempio:TestPager
che ti consente di convalidare il comportamento dell'implementazionePagingSource
personalizzata indipendentemente dal pager e dalla UI reale.asPagingSourceFactory
API per trasformare unFlow<List<Value>>
o unList<Value>
statico in unPagingSourceFactory
che può essere trasmesso a un pager nei testasSnapshot
Estensione Kotlin suFlow<PagingData<Value>>
, che converteFlow<PagingData<Value>>
in unList<Value>
diretto.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 set di dati delle pagine.
- Sono stati aggiunti log predefiniti per esporre le informazioni di debug delle pagine in due livelli:
VERBOSE
eDEBUG
. I log possono essere abilitati tramite il comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Questo vale sia per le pagine con visualizzazioni sia per quelle con Compose. - Sono stati aggiunti i costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. - È stata aggiunta una nuova interfaccia funzionale
PagingSourceFactory
che fornisce una superficie API più esplicita rispetto alle lambdas precedenti () ->PagingSource
. È possibile utilizzare questo valore predefinito per creare l'istanza di un pager.
Versione 3.2.0-rc01
21 giu 2023
androidx.paging:paging-*:3.2.0-rc01
viene rilasciato. La versione 3.2.0-rc01 contiene questi commit.
Contributi esterni
- Ringraziamo Veyndan per aver contribuito ad abbandonare le Paging specifiche di Android/JVM. (#553, #554, #555, #559)
Versione 3.2.0-beta01
7 giugno 2023
androidx.paging:paging-*:3.2.0-beta01
viene rilasciato. La versione 3.2.0-beta01 contiene questi commit.
Paging Compose
- Paging Compose ha raggiunto ufficialmente la stabilità dell'API. Di conseguenza, la versione è stata aggiornata da
1.0.0-alpha20
per corrispondere alla versione di tutti gli altri artefatti di Paging.
Modifiche alle API
- Sono state rimosse le API
items(LazyPagingItems)
eitemsIndexed(LazyPagingItems)
deprecate da Compose Paging. Consulta le note di rilascio di1.0.0-alpha20
Paging Compose per un esempio delle API sostitutive. (I9626e).
Versione 3.2.0-alpha06
24 maggio 2023
androidx.paging:paging-*:3.2.0-alpha06
viene rilasciato. 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 valore di fabbrica può essere utilizzato per creare un'istanza diPager
. (I33165, b/280655188) - È stata aggiunta una nuova API
paging-testing
diList<Value>.asPagingSourceFactory()
per ottenere unPagingSourceFactory
che venga 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 nel paging-testing ora sono annotate con
@VisibleForTesting
per garantire che vengano utilizzate solo nei test. (I7db6e). - L'API
asSnapshot
non richiede più il trasferimento di unCoroutineScope
. Ora per impostazione predefinita utilizza il contesto ereditato dall'ambito padre. (Id0a78, b/282240990) - Parametri del costruttore
TestPager
riordinati per creare corrispondenze intuitive per l'ordine dei parametri del costruttorePager
reali (I6185a) - Migrazione dell'utilizzo del tipo lambda
() -> PagingSource<Key, Value>
da parte del test di paging al tipoPagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
Modifiche del comportamento
- Il supervisore principale non è più tenuto a eseguire
asSnapshot
test di paging. L'impostazione non apporta più modifiche al comportamento di test. (Ie56ea)
Versione 3.2.0-alpha05
3 maggio 2023
androidx.paging:paging-*:3.2.0-alpha05
viene rilasciato. La versione 3.2.0-alpha05 contiene questi commit.
Modifiche alle API
- Ora il parametro
loadOperations
dell'API Paging Testing diasSnapshot
viene impostato in modo predefinito su un valore lambda vuoto. In questo modo puoi chiamareasSnapshot
senza trasmettere operazioni di caricamento per recuperare i dati dal caricamento iniziale di aggiornamento. (Ied354, b/277233770)
Miglioramenti alla documentazione
- È stata aggiornata la documentazione su
asPagingSourceFactory()
per chiarire che si tratta di un metodo di estensione su unFlow
che restituisce un fabbrica riutilizzabile per la generazione di istanzePagingSource
. (I5ff4f, I705b5). - È stata aggiornata la documentazione sul
LoadResult.Page
costruttore per chiarire la necessità di eseguire l'override diitemsBefore
eitemsAfter
per supportare la transizione. (Ied354)
Contributi esterni
- Ringraziamo Veyndan per aver contribuito ad abbandonare le Paging specifiche di Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #49)#49
Versione 3.2.0-alpha04
8 febbraio 2023
androidx.paging:paging-*:3.2.0-alpha04
viene rilasciato. La versione 3.2.0-alpha04 contiene questi commit.
Test di paging
- 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 impaginati. Ciò facilita i test di paging relativi, ad esempio, alle trasformazioniPagingData
, falsificando un'origine dati da cui il cercapersone può raccogliere. (I6f230, b/235528239). L'artefatto
paging-testing
è stato espanso con nuove API adatte a verificare che i dati contenuti in unFlow<PagingData<T>>
siano corretti. Può essere usato, ad esempio, per rivendicare l'output di unFlow<PagingData<T>>
dal livello ViewModel.Ciò avviene tramite l'estensione Kotlin
asSnapshot
suFlow<PagingData<Value>>
, che converteFlow<PagingData<Value>>
in unList<Value>
diretto. La funzione lambdaasSnapshot
ti consente di simulare 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 del set di dati delle pagine.// 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, consulta Test di coroutine Kotlin su Android. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic9b9, {def2389, {def2382, {def2322{/13821238
Modifiche alle API
- Le chiamate UI a
getItem
epeek
inAsyncPagingDataDiffer
ePagingDataAdapter
ora sono contrassegnate correttamente come richiamabili solo nel thread principale. (I699b6) - Sono stati rimossi i caratteri jolly dai tipi generici utilizzati da
TestPager
, in modo da poter utilizzare più facilmente i risultati di quei metodi nel codice scritto nel linguaggio di programmazione Java. (I56c42)
Versione 3.2.0-alpha03
24 ottobre 2022
androidx.paging:paging-*:3.2.0-alpha03
viene rilasciato. La versione 3.2.0-alpha03 contiene questi commit.
Test di paging
Questa release contiene un nuovo elemento: paging-testing
. Questo artefatto fornisce API progettate per testare le unità di ogni livello dell'app e la sua integrazione con Paging in isolamento.
Ad esempio, questa prima release include una classe TestPager
che consente di convalidare il comportamento della tua implementazione PagingSource
personalizzata indipendentemente dall'Pager
e dalla UI reale, in cui normalmente avresti bisogno per simulare l'integrazione di Paging end-to-end.
TestPager
dovrebbe essere considerato un falso: un doppio di test che rispecchia l'implementazione reale di Pager
, fornendo al contempo una superficie API semplificata per testare una PagingSource
. Queste API sono API suspend
e devono essere eseguite all'interno di runTest
come descritto nella guida per il test di coroutine Kotlin su Android.
Un esempio di queste API in uso è disponibile nei test room-paging
, sottoposti a refactoring per l'utilizzo di TestPager
.
Modifiche alle API
- Consente l'iterazione pratica da
LoadResult.Page.data
aLoadResult.Page.iterator()
. Ciò consente indirettamente di utilizzare il metodoflatten
della libreria standard Kotlin quando gli viene assegnato un valoreList<LoadResult.Page>
, ad esempio la proprietàpages
diPagingState
che viene trasmessa al metodoPagingSource.getRefreshKey
. (Ie0718)
Versione 3.2.0-alpha02
10 agosto 2022
androidx.paging:paging-*:3.2.0-alpha02
viene rilasciato. 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 durante l'utilizzo dipaging-common:3.2.0-alpha01
con il runtimepaging-runtime:3.1.1
o precedente.(b/235256201)
Versione 3.2.0-alpha01
1° giugno 2022
androidx.paging:paging-*:3.2.0-alpha01
viene rilasciato. La versione 3.2.0-alpha01 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti i costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. (Idc878) - Per impostazione predefinita,
PagingData.from()
ePagingData.empty()
non influiranno più suCombinedLoadStates
sul lato presentatore. È stato aggiunto un nuovo sovraccarico che consente di passaresourceLoadStates
eremoteLoadStates
a questi costruttori per mantenere il comportamento esistente dell'impostazione diLoadStates
in modo che sia completamente terminale (ad esempioNotLoading(endOfPaginationReached = false)
), con la possibilità di includere anche stati remoti, se necessario. SeLoadStates
non vengono superati, il valoreCombinedLoadStates
precedente verrà mantenuto sul lato presentatore quando riceve ilPagingData
statico. (Ic3ce5, b/205344028).
Correzioni di bug
- Ora il risultato di
PagingSource.getRefreshKey()
viene assegnato correttamente alla priorità suinitialKey
nei casi in cui restituirebbe null, ma è stato impostato un valoreinitialKey
non null. (Ic9542, b/230391606).
Contributi esterni
- Aggiornamento di :compose:ui:ui-test api (updateApi) a causa della migrazione di test-coroutines-lib (I3366d)
Versione 3.1
Versione 3.1.1
9 marzo 2022
androidx.paging:paging-*:3.1.1
viene rilasciato. 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 rende molto più facile reagire alle modificheLoadState
rimuovendo gli eventiLoadState.NotLoading
ridondanti che sono stati generati tra i tentativi di caricamento non riusciti, durante l'aggiornamento o durante l'annullamento della convalida.
Versione 3.1.0
17 novembre 2021
androidx.paging:paging-*:3.1.0
viene rilasciato. 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 - Modifiche del comportamento in
LoadState
:- Ora
endOfPaginationReached
è semprefalse
perLoadType.REFRESH
sia perPagingSource
che perRemoteMediator
LoadStates
da Paging ora attendono valori validi sia daPagingSource
che daRemoteMediator
prima di emettere i dati a valle. Le nuove generazioni diPagingData
ora inizieranno sempre correttamente conLoading
per lo stato di aggiornamento, anziché reimpostare in modo errato aNotLoading
in alcuni casi..loadStateFlow
e.addLoadStateListener
sulle API presentatore non inviano più in modo ridondante un valoreCombinedLoadStates
iniziale con stati del mediatore sempre impostati sunull
- Ora
- La cancellazione delle generazioni passate ora avviene con impazienza a causa dell’annullamento della convalida / delle nuove generazioni. Non dovrebbe più essere obbligatorio usare
.collectLatest
suFlow<PagingData>
, anche se è comunque consigliabile. PagingSource.LoadResult.Invalid
è stato aggiunto come nuovo tipo restituito daPagingSource.load
e di conseguenza il paging ignora eventuali richieste di caricamento in attesa o future in questoPagingSource
e lo rende invalida. Questo tipo restituito è progettato per gestire dati potenzialmente non validi o inattivi che possono essere restituiti dal database o dalla rete.- Sono state aggiunte le API presentatore
.onPagesPresented
e.addOnPagesUpdatedListener
, che si sono attivate in modo sincrono man mano che le pagine vengono presentate nell'interfaccia utente. Gli aggiornamenti di pagina 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, ad esempio Una nuova generazione che completa il caricamento iniziale senza aggiornamenti perché l'elenco è esattamente lo stesso attiverà comunque questo callback.
- Viene inserita una pagina anche se quella inserita non contiene nuovi articoli.
- Una pagina viene eliminata anche se la pagina eliminata era vuota.
Versione 3.1.0-rc01
3 novembre 2021
androidx.paging:paging-*:3.1.0-rc01
viene rilasciato. La versione 3.1.0-rc01 contiene questi commit.
Correzioni di bug
- È stata corretta una condizione di gara + perdita di memoria in .cachedIn() nei casi in cui più eventi di carico sono stati inviati dal Paging downstream mentre non ci sono osservatori o tra quando un osservatore passa a un nuovo PagingData. (Ib682e).
Versione 3.1.0-beta01
13 ottobre 2021
androidx.paging:paging-*:3.1.0-beta01
viene rilasciato. La versione 3.1.0-beta01 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui molti accessi rapidi agli elementi potevano causare la perdita di questi elementi in prefetchDistance, con conseguente blocco del caricamento delle pagine. Questo problema si verifica soprattutto quando molti elementi vengono disposti contemporaneamente in un ordine che dà la priorità al caricamento in base alla direzione di scorrimento dell'utente. Gli accessi a questi elementi vengono ora memorizzati nel buffer e hanno la priorità in modo sincrono per evitare che vengano eliminati. (aosp/1833273).
Versione 3.1.0-alpha04
29 settembre 2021
androidx.paging:paging-*:3.1.0-alpha04
viene rilasciato. La versione 3.1.0-alpha04 contiene questi commit.
Modifiche alle API
- Le 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 che endOfPaginationReached fossetrue
per RemoteMediatorREFRESH
, ma non per PagingSource. Questo comportamento ora è consolidato per restituire semprefalse
poiché non ha mai senso che REFRESH sia un terminale ed è ora documentato come parte del contratto API in LoadStates. Quando decidi se la paginazione viene interrotta, devi sempre farlo in relazione alle istruzioni APPEND o PREPEND. (I047b6) I LoadStates di Paging ora attendono valori validi sia da PagingSource che da RemoteMediator prima di emettere i downstream tra le generazioni. In questo modo, le nuove generazioni di PagingData non possono inviare il NotLoading in SharedLoadStates.source.refresh se era già in fase di caricamento. Ora le nuove generazioni di PagingData inizieranno sempre correttamente con il caricamento per lo stato di aggiornamento, invece di reimpostare correttamente prima in modo errato in alcuni casi.
La cancellazione delle generazioni passate ora avviene con grande ansia con l'annullamento delle nuove generazioni. Non dovrebbe più essere obbligatorio utilizzare .collectLatest su
Flow<PagingData>
, anche se è vivamente consigliato farlo (I0b2b5, b/177351336, b/195028524)..loadStateFlow
e.addLoadStateListener
sulle API presentatore non inviano più in modo ridondante unCombinedLoadStates
iniziale che ha sempre gli stati del mediatore impostati sunull
e gli stati dell'origine impostati suNotLoading(endOfPaginationReached = false)
. Ciò significa che:- Se utilizzi RemoteMediator, gli stati del mediatore verranno sempre compilati.
- La registrazione di un nuovo listener loadState o di un nuovo raccoglitore su
.loadStateFlow
non emetterà più immediatamente il valore attuale se non ha ricevuto un valoreCombinedLoadStates
reale daPagingData
. Questo può accadere se un raccoglitore o un listener viene avviato prima che sia stato inviato unPagingData
. (I1a748)
Versione 3.1.0-alpha03
21 luglio 2021
androidx.paging:paging-*:3.1.0-alpha03
viene rilasciato. La versione 3.1.0-alpha03 contiene questi commit.
Modifiche alle API
Un terzo tipo restituito LoadResult.Invalid viene aggiunto a PagingSource. Quando un PagingSource.load restituisce LoadResult.Invalid, il paging ignora i dati caricati e non convalida PagingSource. Questo tipo restituito è progettato per gestire dati potenzialmente non validi o inattivi che possono essere restituiti dal database o dalla rete.
Ad esempio, se il database sottostante viene scritto ma PagingSource non invalida nel tempo, potrebbe restituire risultati incoerenti se la sua implementazione dipende dall'immutabilità del set di dati di supporto da cui viene caricato (ad es. LIMIT implementazioni del database in stile OFFSET). In questo scenario, consigliamo di verificare l'eventuale annullamento della convalida dopo il caricamento e di restituire il valore LoadResult.Invalid, che fa sì che il Paging ignori eventuali richieste di caricamento in attesa o future per questa PagingSource e la invalida.
Questo tipo restituito è supportato anche dall'API Paging2 che sfrutta LivePagedList o RxPagedList. Quando utilizzi un oggetto PagingSource con le API PagedList di Paging2, il PagedList viene immediatamente scollegato, interrompendo ulteriori tentativi di caricamento dei dati in questo PagedList e attivando l'annullamento della convalida in PagingSource.
LoadResult è una classe protetta, il che significa che questa è una modifica non compatibile con l'origine in modo che i casi d'uso che utilizzano direttamente i risultati di PagingSource.load dovranno gestire LoadResult.Invalid al momento della compilazione. Ad esempio, gli utenti di Kotlin che sfruttano il tipo esaustivo di quando controllare il tipo restituito dovranno aggiungere un controllo per il tipo non valido. (Id6bd3, b/191806126, b/192013267).
Correzioni di bug
- I callback di invalidazione aggiunti tramite PagingSource.registerInvalidatedCallback o DataSource.addInvalidatedCallback ora si attivano automaticamente se sono stati registrati su un PagingSource / DataSource già non valido. Questo risolve una race condizione che ha causato l'eliminazione degli indicatori di annullamento da parte del Paging e il blocco quando viene fornita un'origine già non valida durante il caricamento iniziale. Inoltre, i callback non validi vengono ora rimossi correttamente dopo essere stati attivati, in quanto ne sarà garantito che vengano richiamati al massimo una 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
androidx.paging:paging-*:3.1.0-alpha02
viene rilasciato. La versione 3.1.0-alpha02 contiene questi commit.
Nuove funzionalità
Sono state aggiunte API onPagesPresented listener e del presentatore del flusso che si attivano immediatamente dopo l'aggiornamento delle pagine presentate nell'interfaccia utente.
Poiché questi aggiornamenti sono sincroni con l'interfaccia utente, puoi chiamare metodi dell'adattatore come .snapshot e .getItemCount, per esaminare lo stato dopo l'applicazione dell'aggiornamento. Nota che il comando .snapshot() veniva chiamato in modo esplicito perché può essere costoso da eseguire a ogni aggiornamento.
Gli aggiornamenti di pagina 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, ad esempio Una nuova generazione che completa il caricamento iniziale senza aggiornamenti perché l'elenco è esattamente lo stesso attiverà comunque questo callback.
- Viene inserita una pagina, anche se non contiene nuovi elementi
- Una pagina viene eliminata, anche se quella eliminata era vuota (I272c9, b/189999634)
Correzioni di bug
- L'accesso a PagedList.dataSource dal valore iniziale generato da LivePagedList o RxPagedList non genererà più erroneamente un'eccezione che potrebbe avere un'eccezione (I96707)
Versione 3.1.0-alpha01
2 giugno 2021
androidx.paging:paging-*:3.1.0-alpha01
viene rilasciato. La versione 3.1.0-alpha01 contiene questi commit.
Modifiche alle API
- I corsi forniti da
paging-rxjava3
ora si trovano nel pacchettoandroidx.paging.rxjava3
, in modo da non entrare in conflitto conpaging-rxjava2
(Ifa7f6)
Correzioni di bug
- Risolto il problema per cui le pagine inviavano a volte eventi diversi in modalità No-op a RecyclerView, causando l'attivazione anticipata di determinati listener. (Ic507f, b/182510751).
Contributi esterni
- Aggiunta delle API di compatibilità PagedList deprecate all'artefatto rxjava3 (Id1ce2, b/182497591)
Paging Compose versione 1.0.0
Versione 1.0.0-alpha20
24 maggio 2023
androidx.paging:paging-compose:1.0.0-alpha20
viene rilasciato. La versione 1.0.0-alpha20 contiene questi commit.
Nuove funzionalità
- Paging Compose ora supporta l'anteprima di un elenco di dati falsi creando un
PagingData.from(fakeData)
e implementando questoPagingData
in unMutableStateFlow
(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Utilizzando questi dati come input in@Preview
, le chiamate acollectAsLazyPagingItems()
fornirannoLazyPagingItems
visualizzabile in anteprima. (I8a78d, b/194544557).
Correzioni di bug
- I dati memorizzati nella cache da
pager.flow.cachedIn
e 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, una volta ripristinato lo stato. (I97a60, b/177245496).
Versione 1.0.0-alpha19
3 maggio 2023
androidx.paging:paging-compose:1.0.0-alpha19
viene rilasciato. La versione 1.0.0-alpha19 contiene questi commit.
Supporto di tutti i layout lenti
In precedenza, la Scrittura Paging forniva estensioni items
e itemsIndexed
personalizzate su LazyListScope
, il che significava che non era possibile utilizzare la Scrittura Paging con altri layout lazy come LazyVerticalGrid
, HorizontalPager
o altri componenti lenti personalizzati forniti dalle librerie Wear e TV. La risoluzione di questa flessibilità è l'aggiornamento principale di questa release.
Per supportare layout più lenti, dovevamo creare API a un livello diverso, anziché fornire un'API items
personalizzata per ogni layout lento, Scrittura paging ora fornisce metodi di estensione di livello leggermente inferiore su LazyPagingItems
in itemKey
e itemContentType
. Queste API sono pensate per aiutarti a implementare i parametri key
e contentType
nelle API items
standard già esistenti per LazyColumn
, LazyVerticalGrid
, oltre alle API equivalenti come HorizontalPager
. (Ifa13b, Ib04f0, b/259385813).
Ciò significa che il supporto di LazyVerticalGrid
sarebbe:
// 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 LazyColumn
e LazyRow
, abbiamo ritenuto che la coerenza tra tutti i layout pigri fosse un fattore importante per chi utilizza la funzionalità Scrittura per pagina in futuro. Per questo motivo, le estensioni esistenti a 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 rispecchia il 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
androidx.paging:paging-compose:1.0.0-alpha17
viene rilasciato. La versione 1.0.0-alpha17 contiene questi commit.
Nuove funzionalità
- Aggiungi il supporto di un
CoroutineContext
personalizzato durante la chiamata al numerocollectLazyPagingItems
. (I7a574, b/243182795, b/233783862).
Versione 1.0.0-alpha16
10 agosto 2022
androidx.paging:paging-compose:1.0.0-alpha16
viene rilasciato. 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/problemi/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
androidx.paging:paging-compose:1.0.0-alpha15
viene rilasciato. La versione 1.0.0-alpha15 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti i costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. (Idc878)
Correzioni di bug
LazyPagingItems
ora imposta il valoreloadState
iniziale con un aggiornamento diLoadState.Loading
. (I55043, b/224855902)
Versione 1.0.0-alpha14
13 ottobre 2021
androidx.paging:paging-compose:1.0.0-alpha14
viene rilasciato. La versione 1.0.0-alpha14 contiene questi commit.
Versione 1.0.0-alpha13
29 settembre 2021
androidx.paging:paging-compose:1.0.0-alpha13
viene rilasciato. 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
androidx.paging:paging-compose:1.0.0-alpha12
viene rilasciato. La versione 1.0.0-alpha12 contiene questi commit.
Modifiche alle API
items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
utilizzati per connettere Paging conLazyColumn/Row
ora accettano il parametro chiave di opzione, che consente di specificare una chiave stabile che rappresenta l'elemento. Puoi scoprire di più 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
androidx.paging:paging-compose:1.0.0-alpha11
viene rilasciato. La versione 1.0.0-alpha11 contiene questi commit.
Versione 1.0.0-alpha10
2 giugno 2021
androidx.paging:paging-compose:1.0.0-alpha10
viene rilasciato. La versione 1.0.0-alpha10 contiene questi commit.
Versione 1.0.0-alpha09
18 maggio 2021
androidx.paging:paging-compose:1.0.0-alpha09
viene rilasciato. La versione 1.0.0-alpha09 contiene questi commit.
Correzioni di bug
- Ora sono osservabili itemCount e item getter di LazyPagingItems, che ne consentono l'utilizzo anche con LazyVerticalGrid (Ie2446, b/171872064, b/168285687)
Compatibilità di Scrivi
androidx.paging:paging-compose:1.0.0-alpha09
è compatibile solo con Compose1.0.0-beta07
e versioni successive.
Versione 1.0.0-alpha08
24 febbraio 2021
androidx.paging:paging-compose:1.0.0-alpha08
viene rilasciato. La versione 1.0.0-alpha08 contiene questi commit.
Aggiornata per l'integrazione con Compose 1.0.0-beta01.
Versione 1.0.0-alpha07
10 febbraio 2021
androidx.paging:paging-compose:1.0.0-alpha07
viene rilasciato. La versione 1.0.0-alpha07 contiene questi commit.
Aggiornata per l'integrazione con Compose alpha12.
Versione 1.0.0-alpha06
28 gennaio 2021
androidx.paging:paging-compose:1.0.0-alpha06
viene rilasciato. 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
androidx.paging:paging-compose:1.0.0-alpha05
viene rilasciato. La versione 1.0.0-alpha05 contiene questi commit.
Aggiornato in modo da dipendere da Compose 1.0.0-alpha10.
Versione 1.0.0-alpha04
16 dicembre 2020
androidx.paging:paging-compose:1.0.0-alpha04
viene rilasciato. La versione 1.0.0-alpha04 contiene questi commit.
Correzioni di bug
- Sono state aggiornate le proprietà di convenienza,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
per eseguire la transizione solo daLoading
aNotLoading
dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoading
per garantire l'applicazione dell'aggiornamento remoto. (I65619)
Versione 1.0.0-alpha03
2 dicembre 2020
androidx.paging:paging-compose:1.0.0-alpha03
viene rilasciato. La versione 1.0.0-alpha03 contiene questi commit.
- Aggiornato per corrispondere a Compose 1.0.0-alpha08.
Versione 1.0.0-alpha02
11 novembre 2020
androidx.paging:paging-compose:1.0.0-alpha02
viene rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti i metodi
.peek()
,.snapshot()
,.retry()
e.refresh()
aiLazyPagingItem
dispositivi che espongono le stesse funzionalità disponibili inAsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660)
Versione 1.0.0-alpha01
28 ottobre 2020
androidx.paging:paging-compose:1.0.0-alpha01
viene rilasciato. 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
androidx.paging:paging-*:3.0.1
viene rilasciato. La versione 3.0.1 contiene questi commit.
Correzioni di bug
- L'accesso a
PagedList.dataSource
dal valore iniziale prodotto daLivePagedList
oRxPagedList
non genererà più erroneamente un'eccezione di stato sobrio (I96707)
Versione 3.0.0
Versione 3.0.0
5 maggio 2021
androidx.paging:paging-*:3.0.0
viene rilasciato. La versione 3.0.0 contiene questi commit.
Funzionalità principali della versione 3.0.0
La maggior parte dell'API esistente da Paging 2.x.x è stata ritirata a favore delle nuove API Paging 3 per introdurre i seguenti miglioramenti:
- Assistenza di alto livello per coroutine Kotlin e Flow
- Assistenza per l'annullamento
- Stato di caricamento e indicatori 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 di stato in corso...
Versione 3.0.0-rc01
21 aprile 2021
androidx.paging:paging-*:3.0.0-rc01
viene rilasciato. La versione 3.0.0-rc01 contiene questi commit.
Correzioni di bug
- Risolto il problema per cui le pagine inviavano a volte eventi diversi in modalità No-op a RecyclerView, causando l'attivazione anticipata di determinati listener. (Ic507f, b/182510751).
Versione 3.0.0-beta03
24 marzo 2021
androidx.paging:paging-*:3.0.0-beta03
viene rilasciato. La versione 3.0.0-beta03 contiene questi commit.
Correzioni di bug
- Abbiamo rinnovato la modalità di gestione dei segnaposto quando l'elenco viene ricaricato, per evitare salti imprevisti in RecyclerView. Per i dettagli, consulta NullPaddingDiffing.md. (If1490, b/170027529, b/177338149)
- I vari builder di PagedList (percorso di compatibilità precedente) non chiamano più in modo sincrono più erroneamente
DataSource.Factory.create()
nel thread principale quando viene chiamato.build()
. (b/182798948)
Versione 3.0.0-beta02
10 marzo 2021
androidx.paging:paging-*:3.0.0-beta02
viene rilasciato. 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 contrassegnati nel metodo@get
, che viene ignorato dal compilatore Kotlin a causa di: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Correzioni di bug
- Applicare restrizioni all'uso pubblico delle API sperimentali (I6aa29, b/174531520)
- Risolto un bug per cui
PagingState
diventa semprenull
quando viene richiesto l'aggiornamento remoto. - Risolto un bug per cui le pagine vuote restituite da PagingSource potevano impedire il nuovo recupero del Paging per soddisfare
prefetchDistance
, causando il blocco delle pagine.
Versione 3.0.0-beta01
10 febbraio 2021
androidx.paging:paging-*:3.0.0-beta01
viene rilasciato. La versione 3.0.0-beta01 contiene questi commit.
Modifiche alle API
- I wrapper Rx2 e Rx3 ora espongono l'annotazione sperimentale da cui 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 risolto il problema di
IndexOutOfBoundsException: Inconsistency detected
che a volte veniva generato quando si utilizzava l'APIDataSource
v2 tramite i percorsi di compatibilità - La chiamata
isInvalid
durante l'inizializzazione diDataSource
, se utilizzata tramite i percorsi di compatibilità, viene ora avviata correttamente su fetchDispatcher anziché nel thread principale. Questa modifica corregge unIllegalStateException
a causa dell'accesso al database sul thread principale quando si utilizza l'implementazionePagingSource
della stanza.
Versione 3.0.0-alpha13
27 gennaio 2021
androidx.paging:paging-*:3.0.0-alpha13
viene rilasciato. La versione 3.0.0-alpha13 contiene questi commit.
Modifiche alle API
- L'implementazione di
PagingSource.getRefreshKey
non è più facoltativa, ma è una funzione astratta senza un'implementazione predefinita. Gli utenti che eseguono la migrazione possono continuare a restituire l'implementazione predefinita, che restituisce semplicementenull
, magetRefreshKey()
dovrebbe avere un'implementazione reale che restituisca una chiave in base alla posizione di scorrimento attuale dell'utente, che consente al Paging di continuare il caricamento incentrato sull'area visibile tramitePagingState.anchorPosition
, se possibile. (I4339a) InvalidatingPagingSourceFactory
è ora un corso finale (Ia3b0a)- Consente la configurazione del comportamento del separatore di terminale (intestazione / piè di pagina)
con un parametro SeparatorType aggiuntivo facoltativo. Le due opzioni sono:
FULLY_COMPLETE
: comportamento esistente; attendi che PagingSource e RemoteMediator contrassegnino endOfPaginationReached prima di aggiungere i separatori di terminale. Se RemoteMediator non viene utilizzato, il valore remoto delloadState viene ignorato. Questo è utile principalmente se vuoi mostrare i separatori di sezione solo quando la sezione è completamente caricata, incluso il recupero da un'origine remota, ad esempio la rete.SOURCE_COMPLETE
- Attendi solo che PagingSource contrassegni endOfPaginationReached anche se viene usato RemoteMediator. In questo modo le intestazioni e i piè di pagina vengono presentati in modo sincrono con il caricamento iniziale, il che impedisce agli utenti di scorrere per vedere i separatori dei terminali. (Ibe993, b/174700218).
Correzioni di bug
- Correzione di una rara perdita di memoria che si verifica quando un PagingSource viene invalidato prima ancora che PageFetcher inizi ad avviare il caricamento. (I9606b, b/174625633)
Versione 3.0.0-alpha12
13 gennaio 2021
androidx.paging:paging-*:3.0.0-alpha12
viene rilasciato. La versione 3.0.0-alpha12 contiene questi commit.
Modifiche alle API
- InvalidatingPagingSourceSource non è più una classe astratta, poiché non ha mai avuto metodi astratti. (I4a8c4).
- È stato aggiunto un sovraccarico di .cachedIn() che accetta ViewModel anziché Lifecycle o CoroutineScope per utenti Java. (I97d81, b/175332619).
- Consenti ai chiamanti Java di utilizzare le operazioni di trasformazione di PagingData in modo asincrono, accettando un esecutore in argomenti degli operatori di trasformazione. Il suffisso -Sync è stato rimosso per tutti gli operatori di trasformazione -Sync ora e gli utenti di Kotlin Coroutine dovranno fare chiarezza richiamando
la funzione di estensione che accetta invece un blocco sospeso.
Tutti gli operatori di trasformazione di PagingData sono stati spostati nelle estensioni
nella classe PagingDataTransforms statica. Gli utenti Java dovranno
chiamarli tramite helper statici, ad es.
PagingDataTransforms.map(pagingData, transform)
Per gli utenti Kotlin, la sintassi è la stessa, ma devi importare la funzione. (If6885, b/172895919)
Correzioni di bug
- Risolto il bug per cui
RemoteMediator.load()
non veniva chiamato duranteadapter.refresh()
se fosse già stata raggiunta la fine dell'impaginazione.
Versione 3.0.0-alpha11
16 dicembre 2020
androidx.paging:paging-*:3.0.0-alpha11
viene rilasciato. 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, in particolare nel caso di origine a più livelli, è ancora in fase di sviluppo):
- il flusso viene memorizzato nella cache e l'applicazione non viene terminata (ad esempio, il flusso viene memorizzato nella cache in un modello di visualizzazione e l'attività viene ricreata nel processo)
- l'origine del paging viene conteggiata, i segnaposto sono abilitati e il layout non è scaglionato.
Modifiche alle API
PagingSource.getRefreshKey()
ora è un'API stabile (I22f6f, b/173530980)PagingSource.invalidate
non è più una funzione aperta. Se hai bisogno di ricevere una notifica quando si verifica l'annullamento della convalida, valuta la possibilità di chiamare il metodo registerInvalidatedCallback anziché eseguire l'override di Invalidate. (I628d9, b/173029013, b/137971356).- Pager ora ha un unico costruttore sperimentale insieme ai suoi costruttori normali, anziché far fuoriuscire le API sperimentali nell'API pubblica non sperimentale tramite l'annotazione di attivazione. (I9dc61, b/174531520)
- Sono state aggiornate le proprietà di convenienza,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
per eseguire la transizione solo daLoading
aNotLoading
dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoading
per garantire l'applicazione dell'aggiornamento remoto. (I65619) Il parametro LoadParams.pageSize è stato rimosso (è già stato deprecato). È consigliabile utilizzare
LoadParams.loadSize
in PagingSource.LoadParams.loadSize
è sempre uguale aPagingConfig.pageSize
tranne per la chiamata di caricamento iniziale, dove è uguale aPagingConfig.initialLoadSize
.Se stai testando Paging2 DataSource senza utilizzare un pager o un PagedList,
pageSize
potrebbe non corrispondere alPagingConfig.pageSize
se stai impostando ancheinitialLoadSize
. Se è importante per i test, prova a utilizzare invece un Pager/PagedList che imposterà internamente il valore PageSize corretto per i tuoi metodi di caricamento DataSource. (I98ac7, b/149157296)
Correzioni di bug
- Risolto il problema di arresto anomalo dovuto a un'eccezione di stato sobrioStateException durante l'utilizzo di separatori con PagingConfig.maxSize impostato. (I0ed33, b/174787528)
- Risolto un bug per cui lo stato di caricamento di PREPEND / APPEND non veniva aggiornato a
NotLoading(endOfPaginationReached = true)
subito dopo il caricamento iniziale se RemoteMediator era impostato (I8cf5a) - Risolto il bug per cui le API lato presentatore, come .snapshot(), .peek() e così via, restituivano l'elenco precedente (non aggiornato) all'interno degli aggiornamenti ListUpdateCallback.
- Risolto il bug per cui gli operatori dei separatori non aggiungevano intestazioni o piè di pagina se utilizzati con RemoteMediator
- Risolto il bug per cui l'aggiornamento di LoadState a NotLoading per RemoteMediator si bloccava nello stato di caricamento
- Risolto un bug per cui l'API di compatibilità Paging2.0,
.asPagingSourceFactory()
, potrebbe causare l'inizializzazione del supportoDataSource
sul CoroutineDispatcher errato. In questo modo vengono risolti un arresto anomalo e possibili casi di ANR, soprattutto se si utilizza l'attuale implementazione della stanza di PagingSource, che utilizza questo percorso di compatibilità.
Versione 3.0.0-alpha10
2 dicembre 2020
androidx.paging:paging-*:3.0.0-alpha10
viene rilasciato. La versione 3.0.0-alpha10 contiene questi commit.
Modifiche alle API
Le API deprecate
dataRefreshFlow
edataRefreshListener
sono state rimosse in quanto ridondanti con gli aggiornamenti loadStateFlow / Listener. Per coloro che eseguono la migrazione, l'equivalente loadStateFlow è:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Correzioni di bug
- endOfPaginationReached per RemoteMediator
REFRESH
ora si propaga correttamente agli aggiornamenti di LoadState e impedisce l'attivazione diAPPEND
ePREPEND
remoti. (I94a3f, b/155290248). - La presentazione di un elenco vuoto a causa di una pagina iniziale vuota o di filtri eccessivi non impedirà più all'avvio delle pagine di avviare il caricamento di
PREPEND
oAPPEND
. (I3e702, b/168169730) - Risolto il problema per cui
getRefreshKey
non viene chiamato nelle generazioni successive di PagingSource quando si verificano rapidamente le invalidazioni. (I45460, b/170027530)
Contributi esterni
- È stata aggiunta una nuova classe astratta InvalidatingPagingSourceIndustry
con un'API
.invalidate()
che inoltra l'annullamento della convalida a tutte le PagingSources emesse. 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 del dispositivo
LoadState
remoto se l'annullamento della convalida e il completamento diPagingSource.load(LoadParams.Refresh(...))
vengono completati prima cheRemoteMediator.load()
restituisca b/173717820
Versione 3.0.0-alpha09
11 novembre 2020
androidx.paging:paging-*:3.0.0-alpha09
viene rilasciato. La versione 3.0.0-alpha09 contiene questi commit.
Modifiche alle API
- Ritira completamente i metodi datarefreshFlow / Listener con una clausola replaceWith. (I6e2dd).
Correzioni di bug
- Correzione del lancio di
IllegalArgumentException
quando si utilizzano separatori con RemoteMediator e che veniva attivato un annullamento della convalida mentre è ancora in esecuzione un caricamento remoto che restituirebbe endOfPagination (I3a260)
Versione 3.0.0-alpha08
28 ottobre 2020
androidx.paging:paging-*:3.0.0-alpha08
viene rilasciato. La versione 3.0.0-alpha08 contiene questi commit.
Modifiche alle API
- Le varianti Kotlin / Java di
DataSource.InvalidatedCallback
sono state combinate attivando le conversioni SAM in Kotlin tramite l'interfaccia funzionale (disponibile in Kotlin 1.4). Viene corretto anche un bug per cui la variante kotlin di callback invalida non veniva chiamata dopo essere stata trasformata da.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 della pagina. Inoltre, non effettuerà più una richiesta di caricamento di aggiunta/anticipazione, se è necessario AGGIORNAMENTO, fino al completamento della richiesta di AGGIORNAMENTO. (I6390b, b/162252536) - Il controllo lint API per MissingGetterMatchingBuilder è abilitato per androidx (I4bbea, b/138602561)
- Risolto il bug per cui gli helper
.withLoadState*
ConcatAdapter
si arrestavano in modo anomalo a causa della notifica a RecyclerView dal thread in background (I18bb5, b/170988309) - Risolto il bug per cui il caricamento di una pagina non vuota molto piccola a volte impediva l'attivazione corretta dei caricamenti del precaricamento.Iffda3 b/169259468
Versione 3.0.0-alpha07
1° ottobre 2020
androidx.paging:paging-*:3.0.0-alpha07
viene rilasciato. La versione 3.0.0-alpha07 contiene questi commit.
Modifiche alle API
- Gli operatori asincroni PagingData basati su Guava ora accettano un esecutore come parametro per controllare il contesto di esecuzione. (Id4372)
Correzioni di bug
- È stata corretta l'eccezione IndexOutOfBounds generata in RemoteMediator a causa di una gara. (I00b7f, b/165821814).
- È stata corretta una condizione di gara nella conversione DataSource -> PagingSource che potrebbe far sì che l'elemento PagingSource risultante ignorasse gli indicatori di invalidazione di DataSource.
- Risolto un problema nella logica di fetchin della pagina che a volte causava il mancato rilevamento di nuove generazioni di PagingSource fino alla chiamata di PagingDataAdapter.refresh()
- Risolto il problema che a volte causava la perdita della posizione di scorrimento quando si utilizzava un DataSource convertito in PagingSource (come quello prodotto da una stanza virtuale), in combinazione con RemoteMediator
Contributi esterni
- 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
androidx.paging:paging-*:3.0.0-alpha06
viene rilasciato. La versione 3.0.0-alpha06 contiene questi commit.
Modifiche alle API
UnsupportedOperationException
con messaggi più chiari sulla mancanza di supporto per ID stabili viene ora generata ogni volta che viene chiamatoPagingDataAdapter.setHasStableIds
. (Ib3890, b/158801427)
Correzioni di bug
- insertSeparators non filtra più le pagine vuote consentendo così al presentatore di rispettare la distanza di precaricamento anche nei casi in cui vengono inserite molte pagine vuote. (I9cff6, b/162538908).
Versione 3.0.0-alpha05
19 agosto 2020
androidx.paging:paging-*:3.0.0-alpha05
viene rilasciato. La versione 3.0.0-alpha05 contiene questi commit.
Correzioni di bug
- Ora il paging delle pagine precarica correttamente le pagine anche quando i dati presentati vengono filtrati in modo eccessivo
- Se restituisci
LoadResult.Error
a un carico ritentato, gli accessi all'elemento non riattivano più correttamente i tentativi
Contributi esterni
- Grazie a Clara F per averci aiutato a eseguire la pulizia di alcuni test. (549612)
Versione 3.0.0-alpha04
5 agosto 2020
androidx.paging:paging-*:3.0.0-alpha04
viene rilasciato. 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 caricamenti di pagine di trigger. (I38898, b/159104197) - È stata aggiunta un'API
snapshot()
aPagingDataAdapter
eAsyncPagingDataDiffer
per consentire il recupero degli elementi presentati senza attivare il recupero della pagina. (I566b6, b/159104197) - È stato aggiunto un costruttore
PagingData.from(List<T>)
per consentire la presentazione di elenchi statici, che possono essere combinati con il flusso complessivo di PagingData per mostrare elenchi statici in determinati stati, ad esempio prima del termine del REFRESH iniziale o semplicemente per testare le trasformazioni. (Id134d) - Depreca le API datarefresh Flow / Listener in quanto erano destinate a esporre lo stato degli elementi presentati su REFRESH, ma con miglioramenti alla tempo di callback di loadState Flow / Listener e alla proprietà itemCount, è ridondante (Ia19f3)
- Sono stati aggiunti wrapper di compatibilità RxJava3 per
PagingSource
eRemoteMediator
(I49ef3, b/161480176)
Correzioni di bug
PositionalDataSource
convertito inPagingSource
tramite l'helpertoPagingSourceFactory
, inclusi iPagingSource
generati da Room, ora si autocontrassegnano correttamente per supportare i salti. (I3e84c, b/162161201).- Risolto il bug per cui l'utilizzo della variante sincrona di SubmitData a volte causava una gara che causava un errore
ClosedSendChannelException
(I4d702, b/160192222)
Contributi esterni
- 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
androidx.paging:paging-*:3.0.0-alpha03
viene rilasciato. La versione 3.0.0-alpha03 contiene questi commit.
Modifiche alle API
- Il costruttore di PagingState ora è pubblico, il che dovrebbe semplificare le implementazioni dei test di getAggiornaKey() (I8bf15)
- Varianti della funzione di mappa kotlin di DataSource da Java, per risolvere l'ambiguità tra le varianti originali e kotlin. (If7b23, b/161150011).
- Le API ridondanti, pensate per agevolare gli utenti di Kotlin, sono state contrassegnate come @JvmSynthetic (I56ae5)
- Sono stati aggiunti sovraccarichi per il costruttore di LoadResult.Page, che imposta come valore predefinito itemsBefore e itemsAfter su COUNT_UNDEFINED (I47849)
- Gli operatori PagingData esistenti accettano i metodi di sospensione e hanno introdotto nuovi operatori non in sospensione di mapSync, flatMapSync e filterSync per gli utenti Java. I metodi di trasformazione esistenti sono stati spostati nelle funzioni di estensione, quindi gli utenti Kotlin ora dovranno importarli. (I34239, b/159983232)
Correzioni di bug
- Room (e PositionalDataSource) PagingSources ora mostrerà un separatore iniziale nella prima pagina, quindi l'utente non dovrà scorrere per visualizzarlo. (I6f747, b/160257628)
- Gli accessi agli elementi sui segnaposto ora attivano correttamente i caricamenti di PagingSource fino a quando non viene restituita una pagina che soddisfa l'indice richiesto dopo essere stata trasformata da PagingData.filter() (I95625, b/158763195)
- La correzione di un bug per cui a volte lo scorrimento dopo che PagingSource restituisce un errore potrebbe impedire a PagingDataAdapter.retry() di riprovare. (I1084f, b/160194384).
- Risolvi il problema per cui l'elemento accede dopo aver rilasciato una pagina potrebbe non caricare le pagine nonostante l'accesso all'elemento rientrasse entro prefetchDistance (Ie95ae, b/160038730)
- L'impostazione di PagingConfig.maxSize non consente più i segnaposto dopo un evento di rilascio (I2be29, b/159667766)
Versione 3.0.0-alpha02
24 giugno 2020
androidx.paging:paging-*:3.0.0-alpha02
viene rilasciato. 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
passano ora un valore booleano per indicare se unPagingData
è vuoto (I6e37e, b/159054196) - Sono state aggiunte le API RxJava e Guava per RemoteMediator - RxRemoteMediator e ListenableFutureRemoteMediator
- Sono stati aggiunti aiutanti a PagingState per l'accesso a elementi comuni come
isEmpty()
efirstItemOrNull()
(I3b5b6, b/158892717)
Correzioni di bug
- Il Pager ora verifica il riutilizzo di PagingSource in fabbrica, per evitare il riutilizzo accidentale di PagingSources non valido, che ha generato 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 pausa di
submitData
non causa più un arresto anomalo a causa della raccolta simultanea su piùPagingData
quando viene chiamata dopo la versione sospesa disubmitData
. (I26358, b/158048877) - Correzione dell'eccezione "Impossibile raccogliere due volte dal pager" che poteva verificarsi dopo la modifica della configurazione (I58bcc, b/158784811)
Versione 3.0.0-alpha01
10 giugno 2020
androidx.paging:paging-*:3.0.0-alpha01
viene rilasciato. La versione 3.0.0-alpha01 contiene questi commit.
La libreria di paging è stata aggiornata alla versione 3.0 per abilitare diverse nuove funzionalità principali.
Nuove funzionalità della versione 3.0
- Assistenza di alto livello per coroutine Kotlin e Flow.
- Supporto del caricamento asincrono con le funzioni di sospensione delle coroutine, le primitive RxJava Single o GuavaListenableFuture.
- Stato di caricamento e indicatori di errore integrati per il design adattabile dell'interfaccia utente, inclusa la funzionalità di nuovo tentativo e aggiornamento.
- Miglioramenti al livello di repository
- Interfaccia semplificata dell'origine dati
- Rete e impaginazione del database semplificati
- Assistenza per l'annullamento
- Miglioramenti al livello di presentazione
Problemi noti
- I documenti Java della pagina 3 non sono ancora disponibili. Nel frattempo, utilizza le guide ai link qui sopra o la documentazione di Kotlin. (b/158614050)
Versione 2.1.2
Versione 2.1.2
18 marzo 2020
androidx.paging:paging:2.1.2
viene rilasciato. La versione 2.1.2 contiene questi commit contro la versione 2.1.0.
Correzioni di bug
- Correzione di
IndexOutOfBoundsException
in rari casi durante la conversione di una posizione durante l'annullamento della convalida.
Problema relativo al rilascio
La versione di paging
2.1.1
è stata rilasciata in modo errato da un ramo configurato in modo errato, esponendo le API e le funzionalità implementate parzialmente in una release futura.Il paging
2.1.2
contiene la correzione per il centraggio del carico originariamente rilasciata nella versione 2.1.1, ma questa volta è stata selezionata correttamente in cima alla release 2.1.0. Ti consigliamo vivamente di eseguire l'upgrade a questa release, se attualmente utilizzi la versione 2.1.1.
Versione 2.1.1
Versione 2.1.1
18 dicembre 2019
androidx.paging:paging-*:2.1.1
viene rilasciato. La versione 2.1.1 contiene questi commit.
Correzioni di bug
- I caricamenti iniziali contigui di PositionalDataSources sono ora centrati sull'ultimo accesso quando i segnaposto sono disattivati.
Versione 2.1.0
Versione 2.1.0
25 gennaio 2019
Il paging 2.1.0
viene rilasciato senza modifiche da 2.1.0-rc01
.
Versione 2.1.0-rc01
6 dicembre 2018
Il paging 2.1.0-rc01
viene rilasciato senza modifiche da 2.1.0-beta01
.
Versione 2.1.0-beta01
1 novembre 2018
Il paging 2.1.0-beta01
viene rilasciato senza modifiche da 2.1.0-alpha01
.
Versione 2.1.0-alpha01
12 ottobre 2018
Il paging 2.1.0-alpha01
presenta due importanti aggiunte: rilascio di pagine e librerie di estensioni KTX per ogni artefatto, oltre a diverse altre modifiche all'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()
aggiunto come alternativa Kotlin perPagedList.Config.Builder
androidx.paging.PagedList()
aggiunto come alternativa Kotlin perPagedList.Builder
DataSourceFactory.toLiveData()
aggiunto come alternativa Kotlin perLivePagedListBuilder
DataSourceFactory.toObservable()
etoFlowable()
sono stati aggiunti come alternative Kotlin perRxPagedListBuilder
AsyncPagedListDiffer.addPagedListListener()
aggiunto per l'ascolto quando viene scambiato PagedList. b/111698609- Aggiunta
PagedListAdapter.onCurrentListChanged()
variante che supera il vecchio elenco e il nuovo elenco, deprecata la variante precedente. - Sono state aggiunte
PagedListAdapter/AsyncPagedListDiffer.submitList()
varianti che richiedono un ulteriore callback che si attiva se/quando viene visualizzato l'elenco di pagine, dopo la differenza. In questo modo puoi sincronizzare uno scambio PagedList con altri aggiornamenti dell'interfaccia utente. b/73781068 PagedList.getLoadedCount()
aggiunto per farti sapere quanti elementi sono in memoria. Tieni presente che il valore restituito è sempre uguale a.size()
se i segnaposto sono disattivati.
Correzioni di bug
- Correzione di una condizione di gara in caso di differenze 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 non chiara.- Risolto il problema per cui dimensioni di caricamento iniziali estremamente ridotte e dati invariati non comportavano ulteriori caricamenti b/113122599
Versione 2.0.0
Versione 2.0.0
1 ottobre 2018
La Paging 2.0.0
è stata rilasciata con una singola correzione di bug.
Correzioni di bug
- È stato corretto un arresto anomalo che poteva verificarsi con lo scorrimento molto veloce utilizzando
PositionalDataSource
e i segnaposto b/114635383.
Versione 2.0.0-beta01
2 luglio 2018
Correzioni di bug
- Correzione dei contenuti che scomparivano in alcuni casi anteriori (segnaposto disattivato, PositionalDataSource) b/80149146
- (Già rilasciato in
1.0.1
) Sono stati corretti gli arresti anomali per cuiPagedListAdapter
eAsyncPagedListDiffer
non segnalavano gli eventi di movimento. b/110711937
Dipendenze pre-AndroidX
Per le versioni precedenti ad 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 Paging 1.0.1
è stata 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
- Sono stati corretti gli arresti anomali per cui
PagedListAdapter
eAsyncPagedListDiffer
non sarebbero riusciti a segnalare gli eventi di movimento. b/110711937
RxJava2 Versione 1.0.0
RxJava2 Versione 1.0.0-rc1
16 maggio 2018
La Paging di RxJava2 1.0.0-rc1
è in fase di spostamento per la release candidato senza modifiche rispetto alla versione alpha iniziale.
Versione 1.0.0
Versione 1.0.0-rc1
19 aprile 2018 Candidato per la pubblicazione delle pagine
Non sono presenti altri problemi noti o nuove funzionalità programmate per la release 1.0.0
in cerca di pagine. Esegui l'upgrade dei tuoi progetti per utilizzare 1.0.0-rc1
e aiutaci a testarlo in modo che possiamo spedire un 1.0.0
solido.
Non sono state apportate modifiche a 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 di tempo prima di procedere con il rilascio del candidato.
Non abbiamo in programma di apportare ulteriori modifiche all'API per Paging 1.0
e la soglia di qualsiasi modifica all'API è molto alta.
Il supporto di Alpha RxJava2 per le Paging viene rilasciato come modulo facoltativo separato (android.arch.paging:rxjava2:1.0.0-alpha1
) e verrà temporaneamente sottoposto al controllo delle versioni separatamente finché non si stabilizza.
Questa nuova libreria fornisce un'alternativa RxJava2 a LivePagedListBuilder
, in grado di creare Observable
e Flowable
, utilizzando 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
viene aggiunto tramite il nuovo elementoandroid.arch.paging:rxjava2
.
Modifiche alle API
Modifiche all'API per chiarire il ruolo degli esecutori nei builder:
Rinominato
setBackgroundThreadExecutor()
insetFetchExecutor()
(inPagedList.Builder
eLivePagedListBuilder
)Rinominato
setMainThreadExecutor()
insetNotifyExecutor()
(inPagedList.Builder
).
È stato risolto il problema che il membro di
PagedList.mCallbacks
è privato.
Correzioni di bug
LivePagedListBuilder
attiva il caricamento iniziale diPagedList
sull'esecutore specificato, anziché sul pool di thread IO dei componenti Arch.Risolto il comportamento di invalidazione nei wrapper
DataSource
interni (utilizzati per implementareDataSource.map
, e il caricamento diPositionalDataSource
disattivato dai segnaposto) b/77237534
Versione 1.0.0-alpha7
21 marzo 2018
La Paging 1.0.0-alpha7
viene rilasciata insieme ai cicli di vita 1.1.1
. Poiché la pagina delle pagine alpha7 dipende dallo spostamento della classe Function
menzionata sopra, dovrai aggiornare la dipendenza lifecycle:runtime
a android.arch.lifecycle:runtime:1.1.1
.
Paging alpha7
dovrebbe essere la release finale prima dell'arrivo della versione beta di Paging.
Modifiche alle API
- Gli oggetti
DataSource.LoadParams
ora hanno un costruttore pubblico e gli oggettiDataSource.LoadCallback
sono ora astratti. In questo modo è possibile eseguire il wrapping diDataSource
o testare direttamente unDataSource
con un callback di simulazione. b/72600421 - Mappatori per DataSource e DataSource.Manufacturer
map(Function<IN,OUT>)
consente di trasformare, aggregare o decorare i risultati caricati da un elementoDataSource
.mapByPage(<List<IN>,List<OUT>>)
consente la stessa operazione per l'elaborazione batch (ad esempio, se gli elementi caricati da SQL devono eseguire query aggiuntive su un database separato, l'operazione può essere eseguita in batch).
- Aggiunta di
PagedList#getDataSource()
come metodo di convenienza b/72611341 - Tutte le classi deprecate sono state rimosse dall'API, inclusi i resti del pacchetto
recyclerview.extensions
eLivePagedListProvider
. DataSource.Factory
è stato modificato da un'interfaccia a una classe astratta per abilitare la funzionalità di mappa.
Correzioni di bug
- Builder modificati in modo che sia definitivo. 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. - Risolto il bug per cui
BoundaryCallback.onItemAtEndLoaded
non veniva richiamato perPositionalDataSource
se i segnaposto sono attivati e la dimensione totale è un multiplo esatto delle dimensioni della pagina.
Versione 1.0.0-alpha5
22 gennaio 2018
Correzioni di bug
- Correggere il caricamento delle pagine quando i segnaposto sono disattivati b/70573345
- Logging aggiuntivo per il rilevamento del bug PendingArgumentException b/70360195 (e correzione speculativa lato stanza)
- Correzioni del codice di esempio Javadoc b/70411933, b/71467637