Paging
Questa tabella elenca tutti gli elementi nel gruppo androidx.paging
.
Elemento | Release stabile | Candidato per la release | Versione beta | Versione alpha |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
Dichiarazione delle dipendenze
Per aggiungere una dipendenza da 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 elementi necessari nel file build.gradle
per la tua app o il tuo 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, consulta la documentazione di ktx.
Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze di compilazione.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di crearne uno nuovo, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.
Per ulteriori informazioni, consulta la documentazione del Monitoraggio problemi.
Versione 3.3
Versione 3.3.4
13 novembre 2024
androidx.paging:paging-*:3.3.4
viene rilasciato. La versione 3.3.4 contiene questi commit.
Correzioni di bug
- I test di unità Android che importano Paging 3.3 o versioni successive non genereranno più un errore come
Method isLoggable in android.util.Log not mocked
. (Ia9400, b/331684448)
Versione 3.3.2
7 agosto 2024
androidx.paging:paging-*:3.3.2
viene rilasciato. La versione 3.3.2 contiene questi commit.
Nuove funzionalità
paging-common
epaging-testing
hanno aggiunto nuovi target Kotlin Multipiattaforma:watchos
,tvos
elinuxArm64
(90c9768), (53e0eca)
Versione 3.3.1
24 luglio 2024
androidx.paging:paging-*:3.3.1
viene rilasciato. La versione 3.3.1 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui
AsyncPagingDataDiffer
o le API basate su di essa, comePagingDataAdapter
utilizzata conRecyclerView
, non riuscivano ad attivare altri 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
utilizzando unPagingDataAdapter
o unAsyncPagingDataDiffer
. (I8c65a, b/347649763)
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. Ora i presentatori multipiattaforma possono essere creati suPagingDataPresenter
anziché richiedere API di paginazione interne oAsyncPagingDataDiffer
dipaging-runtime
.- Sono stati aggiunti nuovi metodi di assistenza
LoadStates
eCombinedLoadStates
inhasError
eisIdle
per verificare seLoadStates
è in stato Error oNotLoading
, rispettivamente. È stato aggiunto anche un nuovo metodo di estensione KotlinawaitNotLoading()
suFlow<CombinedLoadStates>
che attende che un caricamento venga impostato sullo statoNotLoading
o Error. PagingData.empty()
ora invia gli statiNotLoading
per impostazione predefinita, a meno che non vengano passatiLoadStates
personalizzati al suo costruttore. Questo comportamento si discosta da quello esistente, in cui non viene inviatoLoadStates
quando viene inviato a unPagingDataAdapter
o vengono inviati stati di caricamento quando vengono raccolti comeLazyPagingItems
. Se raccolto comeLazyPagingItems
, ora verrà visualizzato anche un elenco vuoto immediatamente dopo la composizione iniziale.
Compatibilità con Kotlin Multiplatform
La paginazione ora spedisce elementi compatibili con Kotlin Multiplatform, grazie in gran parte al lavoro in 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 che con Android.paging-testing
ha spostato il codice incommon
ed è ora compatibile con jvm e iOS, oltre che con Android.paging-compose
ha spostato il codice incommon
e spedisce un artifact Android, in linea con il supporto multipiattaforma diandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
rimarranno solo per 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 significative. 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 all'API
- La paginazione 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 piccoli errori 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. Ora i presentatori multipiattaforma possono essere creati suPagingDataPresenter
anziché richiedere API di paginazione interne oAsyncPagingDataDiffer
dipaging-runtime
. (Id1f74, b/315214786)- Sono stati aggiunti nuovi metodi di assistenza
LoadStates
eCombinedLoadStates
per verificare seLoadStates
è in stato Error oNotLoading
. È stata aggiunta anche una nuova API che attende su unLoadStateFlow
finché un caricamento non è passato allo statoNotLoading
o Error. (Id6c67)
Modifica del comportamento
PagingData.empty()
ora invia gli statiNotLoading
per impostazione predefinita, a meno che non vengano passatiLoadStates
personalizzati al suo costruttore. Questo comportamento si discosta da quello esistente, in cui non viene inviatoLoadStates
quando viene inviato a unPagingDataAdapter
o vengono inviati stati di caricamento quando vengono raccolti comeLazyPagingItems
. Se raccolto comeLazyPagingItems
, ora verrà visualizzato anche un elenco vuoto immediatamente 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à con Kotlin Multiplatform
La paginazione ora spedisce elementi compatibili con Kotlin Multiplatform, grazie in gran parte al lavoro in upstream del progetto multiplatform-paging di CashApp. In questo modo eviteremo divergenze tra i due repository e li manterremo 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 codice incommon
ed è ora compatibile con jvm e iOS, oltre che con Android.paging-compose
ha spostato il codice incommon
e spedisce un artifact Android, in linea con il supporto multipiattaforma diandroidx.compose
.paging-runtime
,paging-guava
,paging-rxjava2
epaging-rxjava3
rimarranno solo per Android.
Modifiche all'API
- L'interfaccia Logger pubblica pensata solo per l'utilizzo interno è stata ritirata (I16e95, b/288623117)
Contributo esterno
- Grazie a veyndan di Cash App per aver aiutato a spostare Paging su Kotlin Multiplatform (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
Versione 3.3.0-alpha01
20 settembre 2023
- Questa è la prima release multipiattaforma delle librerie androidx.paging. Questa versione contiene solo elementi
*-jvm
e*-android
. Per le varianti di 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 un problema per cui l'API
asSnapshot()
dell'elemento Paging Testing si bloccava quando veniva passato un flusso creato utilizzandoPagingData.from(List)
, poichéasSnapshot()
non aveva informazioni sul completamento del caricamento (a differenza del sovraccaricoPagingData.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) - La composizione con paginazione 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
androidx.paging:paging-*:3.2.0
viene rilasciato. 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 al resto di Paging, dove la sua versione ora corrisponde a tutti gli altri elementi di Paging. Le modifiche apportate dalla versione 3.1.0 includono:
- Supporto per la visualizzazione in anteprima di un elenco di dati falsi creando un
PagingData.from(fakeData)
e inserendo questoPagingData
in unMutableStateFlow
(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Passa questo flusso ai composabili@Preview
come destinatario per l'anteprima dicollectAsLazyPagingItems()
. - Supporto di tutti i layout lazy come
LazyVerticalGrid
eHorizontalPager
, nonché componenti lazy personalizzati dalle librerie Wear e TV. Questo è stato ottenuto tramite i nuovi metodi di estensioneLazyPagingItems
di livello inferioreitemKey
eitemContentType
, che ti aiutano a implementare i parametrikey
econtentType
nelle APIitems
standard già esistenti perLazyColumn
,LazyVerticalGrid
e i relativi equivalenti in API comeHorizontalPager
. items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
, che supportano soloLazyListScope
, sono stati ritirati.
- Supporto per la visualizzazione in anteprima di un elenco di dati falsi creando un
- Nuovo artefatto
paging-testing
che fornisce API progettate per i test di unità di ogni livello dell'app e la sua integrazione con Paging in modo isolato. Ad esempio, includeTestPager
che ti consente di convalidare il comportamento della tua implementazionePagingSource
personalizzata indipendentemente dal pager e dall'interfaccia utente reale.- API
asPagingSourceFactory
per trasformare unFlow<List<Value>>
o unList<Value>
statico in unPagingSourceFactory
che può essere passato a un Pager nei test asSnapshot
Estensione Kotlin suFlow<PagingData<Value>>
, che traduceFlow<PagingData<Value>>
in unList<Value>
diretto.asSnapshot lambda
ti consente di simulare l'interfaccia utente della tua app tramite API comescrollTo
oappendScrollWhile
in modo da verificare che lo snapshot dei dati sia corretto in qualsiasi punto del set di dati paginati.
- Sono stati aggiunti log predefiniti per esporre le informazioni di debug della paginazione in due livelli:
VERBOSE
eDEBUG
. I log possono essere attivati tramite il comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. Questo vale sia per la paginazione con visualizzazioni sia per la paginazione con Scrivi. - 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 ai lambda () ->PagingSource
precedenti. Questa factory può essere utilizzata per creare un'istanza di 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.
Contributo esterno
- Grazie a Veyndan per aver contribuito a rimuovere la funzionalità Paging dalle 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.
Composizione con pagine
- Paging Compose ha ufficialmente raggiunto la stabilità dell'API. Di conseguenza, la versione è stata aggiornata da
1.0.0-alpha20
per corrispondere alla versione di tutti gli altri elementi di paginazione.
Modifiche all'API
- Le API
items(LazyPagingItems)
eitemsIndexed(LazyPagingItems)
obsolete sono state rimosse da Compose con paginazione. Consulta le note di rilascio di Paging Compose1.0.0-alpha20
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 ai lambda() -> PagingSource
esistenti. Questa factory può essere utilizzata per creare un'istanza diPager
. (I33165, b/280655188) - È stata aggiunta una nuova API
paging-testing
diList<Value>.asPagingSourceFactory()
per ottenere unPagingSourceFactory
che si carica 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 all'API
- Tutte le API pubbliche nei test di paginazione sono ora annotate con
@VisibleForTesting
per garantire che vengano utilizzate solo nei test. (I7db6e) - L'API
asSnapshot
non richiede più di passare unCoroutineScope
. Ora per impostazione predefinita utilizza il contesto ereditato dall'ambito principale. (Id0a78, b/282240990) - I parametri del costruttore
TestPager
sono stati riordinati in modo da corrispondere in modo intuitivo all'ordine dei parametri del costruttorePager
reali (I6185a) - È stata eseguita la migrazione dell'utilizzo del tipo lambda
() -> PagingSource<Key, Value>
per i test di paginazione al tipoPagingSourceFactory<Key, Value>
. (I4a950, b/280655188)
Modifiche al comportamento
- Non è più necessario il gestore principale per eseguire i
asSnapshot
test di paginazione. La sua impostazione non apporta più modifiche al comportamento del 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 all'API
- L'API di test di paginazione di
asSnapshot
ora imposta per impostazione predefinita il parametroloadOperations
su una lambda vuota. In questo modo, puoi chiamareasSnapshot
senza passare alcuna operazione di caricamento per recuperare i dati dal caricamento dell'aggiornamento iniziale. (Ied354, b/277233770)
Miglioramenti alla documentazione
- Abbiamo aggiornato la documentazione su
asPagingSourceFactory()
per chiarire che si tratta di un metodo di estensione di unFlow
che restituisce una factory 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 il salto. (Ied354)
Contributi esterni
- Grazie a Veyndan per aver contribuito a rimuovere la funzionalità Paging dalle specifiche di Android/JVM. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
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 paginazione
- L'elemento
paging-testing
ora contiene un metodoasPagingSourceFactory
per creare unpagingSourceFactory
da unFlow<List<Value>>
da fornire a un pager. OgniList<Value>>
emesso dal flusso rappresenta una generazione di dati paginati. In questo modo, è possibile semplificare i test di paginazione, ad esempio sulle trasformazioniPagingData
, simulando un'origine dati da cui il pager deve raccogliere i dati. (I6f230, b/235528239) L'elemento
paging-testing
è stato ampliato con nuove API adatte per verificare la correttezza dei dati contenuti in unFlow<PagingData<T>>
. Questo può essere utilizzato, ad esempio, per verificare l'output di unFlow<PagingData<T>>
dal livello ViewModel.Questo viene eseguito tramite l'estensione Kotlin
asSnapshot
suFlow<PagingData<Value>>
, che traduceFlow<PagingData<Value>>
inList<Value>
diretto. La funzione lambdaasSnapshot
ti consente di simulare l'interfaccia utente della tua app tramite API comescrollTo
oappendScrollWhile
in modo ripetibile e coerente, in modo da poter verificare che lo snapshot dei dati sia corretto in qualsiasi punto dell'insieme di dati paginati.// 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 inrunTest
. Per ulteriori informazioni, consulta la sezione Testare le coroutine Kotlin su Android. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
Modifiche all'API
- Le chiamate dell'interfaccia utente 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
, facilitando l'utilizzo dei risultati di questi 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 paginazione
Questa release contiene un nuovo elemento: paging-testing
. Questo elemento fornisce API progettate per i test di unità di ogni livello dell'app e la sua integrazione con la funzionalità Paginazione in modo isolato.
Ad esempio, questa prima release include una classe TestPager
che ti consente di convalidare il comportamento della tua implementazione PagingSource
personalizzata indipendentemente da Pager
e dall'interfaccia utente reale che normalmente ti servirebbe per simulare l'integrazione di Paging end-to-end.
TestPager
deve essere considerato un falso, un doppio di test che rispecchia l'implementazione reale di Pager
, fornendo al contempo un'interfaccia API semplificata per il test di un PagingSource
. Queste API sono API suspend
e devono essere eseguite in runTest
come descritto nella guida per il test delle coroutine Kotlin su Android.
Un esempio di queste API in uso è disponibile nei test room-paging
, che sono stati sottoposti a refactoring per utilizzare TestPager
.
Modifiche all'API
- Consente un'iterazione comoda su
LoadResult.Page.data
fino aLoadResult.Page.iterator()
. Ciò consente indirettamente l'utilizzo del metodoflatten
della libreria standard 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
androidx.paging:paging-*:3.2.0-alpha02
viene rilasciato. La versione 3.2.0-alpha02 contiene questi commit.
Nuove funzionalità
- La paginazione ora fornisce i log tramite le classi
AsyncPagingDataDiffer
oPagingDataAdapter
per esporre le informazioni di debug raccolte daPagingData
. - I log possono essere attivati tramite il comando
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
Correzioni di bug
- È stato corretto l'errore relativo al costruttore
PagingDataDiffer
mancante quando si utilizzapaging-common:3.2.0-alpha01
con 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 all'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
dal lato del presentatore. È stato aggiunto un nuovo sovraccarico che consente di passaresourceLoadStates
eremoteLoadStates
a questi costruttori per mantenere il comportamento esistente di impostazione diLoadStates
come completamente terminale (ovveroNotLoading(endOfPaginationReached = false)
), con la possibilità di includere anche gli stati remoti, se necessario. Se i valoriLoadStates
non vengono passati, il valoreCombinedLoadStates
precedente verrà mantenuto sul lato del presentatore quando riceve il valorePagingData
statico. (Ic3ce5, b/205344028)
Correzioni di bug
- Il risultato di
PagingSource.getRefreshKey()
ora ha la priorità corretta rispetto ainitialKey
nei casi in cui restituirebbe null, ma è stato impostato uninitialKey
non null. (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
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 erroneamente da.cachedIn()
. Questa modifica semplifica notevolmente la reazione alle modifiche diLoadState
rimuovendo gli eventiLoadState
ridondanti prodotti tra i tentativi di caricamento non riusciti, durante l'aggiornamento o durante l'invalidazione.LoadState.NotLoading
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 - Il comportamento cambia in
LoadState
:- Ora
endOfPaginationReached
è semprefalse
perLoadType.REFRESH
sia perPagingSource
che perRemoteMediator
LoadStates
di Paging ora attende valori validi sia daPagingSource
che daRemoteMediator
prima di emettere il flusso a valle. Le nuove generazioni diPagingData
inizieranno sempre correttamente conLoading
per lo stato di aggiornamento, anziché ripristinareNotLoading
in modo errato in alcuni casi..loadStateFlow
e.addLoadStateListener
nelle API di presentazione non inviano più in modo ridondante unCombinedLoadStates
iniziale con gli stati mediatore impostati sempre sunull
- Ora
- L'annullamento nelle generazioni precedenti ora avviene in modo esplicito in caso di convalida / nuove generazioni. L'utilizzo di
.collectLatest
suFlow<PagingData>
non dovrebbe più essere obbligatorio, anche se è comunque consigliato. PagingSource.LoadResult.Invalid
è stato aggiunto come nuovo tipo di ritorno daPagingSource.load
, il che fa sì che la funzionalità di paginazione scarti eventuali richieste di caricamento in attesa o future per questoPagingSource
e lo renda non valido. Questo tipo di ritorno è progettato per gestire i dati potenzialmente non validi o obsoleti che possono essere restituiti dal database o dalla rete.- Sono state aggiunte le API di presentatore
.onPagesPresented
e.addOnPagesUpdatedListener
, che vengono attivate in modo sincrono quando le pagine vengono presentate nell'interfaccia utente. Gli aggiornamenti di pagina possono verificarsi 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. 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 è 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 e una perdita di memoria in .cachedIn() nei casi in cui più eventi di caricamento sono stati inviati da Paging a valle quando non sono presenti osservatori o 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
- È stato risolto un problema per cui molti accessi rapidi agli elementi potevano causare il loro abbandono in prefetchDistance, causando l'interruzione dei caricamenti delle pagine. Questo è un problema soprattutto quando molti elementi vengono disposti contemporaneamente in un ordine che darebbe la priorità al caricamento rispetto alla direzione di scorrimento dell'utente. Questi accessi agli articoli ora vengono memorizzati nella memoria intermedia e vengono assegnati in modo sincrono una priorità per evitare che vengano persi. (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 all'API
- Le API
Flow<PagingData>.observable
eFlow<PagingData>.flowable
non sono più sperimentali. (Ie0bdd)
Correzioni di bug
- Per LoadStates,
endOfPaginationReached
ora è 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 terminale, ed è ora documentato come parte del contratto dell'API in LoadStates. Quando decidi se la paginazione è terminata, devi sempre farlo in base alle istruzioni APPEND o PREPEND. (I047b6) LoadStates da Paging ora attende valori validi sia da PagingSource che da RemoteMediator prima di emettere il downstream tra le generazioni. In questo modo, le nuove generazioni di PagingData non invieranno NotLoading in CombinedLoadStates.source.refresh se era già attivo Loading; ora le nuove generazioni di PagingData inizieranno sempre correttamente con Loading per lo stato di aggiornamento anziché reimpostare in modo errato su NotLoading in alcuni casi.
L'annullamento nelle generazioni precedenti ora avviene in modo esplicito in caso di convalida/nuove generazioni. L'utilizzo di .collectLatest su
Flow<PagingData>
non dovrebbe più essere necessario, anche se è comunque vivamente consigliato. (I0b2b5, b/177351336, b/195028524).loadStateFlow
e.addLoadStateListener
nelle API di Presentazione non inviano più in modo ridondante unCombinedLoadStates
iniziale che ha sempre gli stati mediatore impostati sunull
e gli stati di origine impostati suNotLoading(endOfPaginationReached = false)
. Ciò significa che:- Gli stati mediatore verranno sempre compilati se utilizzi RemoteMediator.
- La registrazione di un nuovo ascoltatore loadState o di un nuovo raccoglitore su
.loadStateFlow
non emetterà più immediatamente il valore corrente se non ha ricevuto unCombinedLoadStates
reale daPagingData
. Ciò può accadere se un raccoglitore o un ascoltatore inizia 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 all'API
A PagingSource viene aggiunto un terzo tipo di valore restituito LoadResult: LoadResult.Invalid. Quando PagingSource.load restituisce LoadResult.Invalid, la paginazione ignora i dati caricati e invalida PagingSource. Questo tipo di ritorno è progettato per gestire i dati potenzialmente non validi o obsoleti che possono essere restituiti dal database o dalla rete.
Ad esempio, se il database sottostante viene scritto, ma PagingSource non viene invalidato in 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 OFFSET). In questo scenario, è consigliabile verificare l'invalidità dopo il caricamento e restituire LoadResult.Invalid, in modo che Paging elimini eventuali richieste di caricamento in attesa o future per questa PagingSource e la invalidi.
Questo tipo di ritorno è supportato anche dall'API Paging2 che sfrutta LivePagedList o RxPagedList. Quando utilizzi un PagingSource con le API PagedList di Paging2, il PagedList viene immediatamente scollegato, interrompendo ulteriori tentativi di caricare dati su questo PagedList e attivando l'invalidazione su PagingSource.
LoadResult è una classe sigillata, il che significa che si tratta di una modifica incompatibile con il codice sorgente, pertanto 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 utilizzano il controllo del tipo di ritorno con exhaustive-when 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. In questo modo viene risolta una condizione di gara che causava la mancata impostazione di indicatori di convalida e il blocco di Paging quando veniva fornita un'origine già non valida durante il caricamento iniziale. Inoltre, i callback invalidate vengono ora rimossi correttamente dopo essere stati attivati, poiché è garantito che verranno chiamati al massimo una volta. (I27e69)
- Invio del valore iniziale del segnaposto (InitialPagedList) da uno stream 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 le API di ascoltatore e presentatore del flusso onPagesPresented che si attivano immediatamente dopo l'aggiornamento delle pagine presentate nell'interfaccia utente.
Poiché questi aggiornamenti sono sincronizzati con l'interfaccia utente, puoi chiamare i metodi dell'adattatore come .snapshot, .getItemCount per ispezionare lo stato dopo l'applicazione dell'aggiornamento. Tieni presente che .snapshot() è stato lasciato da chiamare esplicitamente perché può essere costoso farlo a ogni aggiornamento.
Gli aggiornamenti della pagina possono verificarsi 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. 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 vuota (I272c9, b/189999634)
Correzioni di bug
- L'accesso a PagedList.dataSource dal valore iniziale prodotto da LivePagedList o RxPagedList non genererà più erroneamente un IllegalStateException (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 all'API
- Le classi fornite da
paging-rxjava3
ora si trovano nel pacchettoandroidx.paging.rxjava3
in modo che non entrino in conflitto conpaging-rxjava2
(Ifa7f6)
Correzioni di bug
- È stato risolto un problema per cui a volte Paging inviava eventi di differenza senza operazioni a RecyclerView, il che poteva causare l'attivazione anticipata di determinati ascoltatori. (Ic507f, b/182510751)
Contributo esterno
- Sono state aggiunte API di compatibilità di PagedList ritirate all'elemento artefatto rxjava3 (Id1ce2, b/182497591)
Compose con paginazione 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à
- La composizione con pagine ora supporta l'anteprima di un elenco di dati falsi creando un
PagingData.from(fakeData)
e inserendo questoPagingData
in unMutableStateFlow
(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). Utilizzando questi dati come input per@Preview
, le chiamate acollectAsLazyPagingItems()
fornirannoLazyPagingItems
visualizzabile in anteprima. (I8a78d, b/194544557)
Correzioni di bug
- I dati memorizzati nella cache di
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 immediatamente dopo la composizione iniziale dopo il ripristino dello 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 lazy
In precedenza, Paging Compose forniva estensioni items
e itemsIndexed
personalizzate su LazyListScope
, il che significava che non potevi utilizzare Paging Compose con altri layout lazy come LazyVerticalGrid
, HorizontalPager
o altri componenti lazy personalizzati forniti dalle librerie Wear e TV. L'eliminazione di questa rigidità è l'aggiornamento principale di questa release.
Per supportare più layout lazy, abbiamo dovuto creare API a un livello diverso: anziché fornire un'API items
personalizzata per ogni layout lazy, Paging Compose ora fornisce metodi di estensione di livello leggermente inferiore su LazyPagingItems
in itemKey
e itemContentType
. Queste API si concentrano sull'implementazione dei parametri key
e contentType
nelle API items
standard già esistenti per LazyColumn
, LazyVerticalGrid
e i relativi equivalenti in API come HorizontalPager
. (Ifa13b, Ib04f0, b/259385813)
Ciò significa che il supporto di un LazyVerticalGrid
avrà il seguente aspetto:
// 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.
Sebbene queste modifiche rendano gli esempi LazyColumn
e LazyRow
più lunghi di alcune righe, abbiamo ritenuto che la coerenza in tutti i layout lazy fosse un fattore importante per chi utilizza la funzionalità di composizione con pagine in futuro. Per questo motivo, le estensioni esistenti per LazyListScope
sono state ritirate. (I0c459, I92c8f, b/276989796)
Modifiche all'API
- Per semplificare la migrazione alle nuove API, le funzioni di estensione
items
eitemsIndexed
inLazyListScope
ora supportano un parametrocontentType
, che rispecchia il supporto nelle nuove API. (Ib1918, b/255283378)
Aggiornamenti delle dipendenze
- La funzionalità Compose con paginazione ha aggiornato la 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 quando chiamicollectLazyPagingItems
. (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à
- La paginazione ora fornisce i log tramite la classe
LazyPagingItems
per esporre le informazioni di debug raccolte da PagingData. - I log possono essere attivati 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 utilizzapaging-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 all'API
- Sono stati aggiunti i costruttori per
PagingDataAdapter
eAsyncPagingDataDiffer
che accettanoCoroutineContext
anzichéCoroutineDispatcher
. (Idc878)
Correzioni di bug
LazyPagingItems
ora impostaloadState
iniziale in modo che venga aggiornato conLoadState.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 all'API
- La funzione
LazyPagingItems.snapshot()
è stata sostituita con la proprietàLazyPagingItems.itemSnapshotList
(Ie2da8) - Il campo
LazyPagingItems.getAsState()
obsoleto è 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 all'API
items(lazyPagingItems)
eitemsIndexed(lazyPagingItems)
utilizzati per collegare la paginazione aLazyColumn/Row
ora accettano il parametro opzione key che consente di specificare una chiave stabile che rappresenta l'elemento. Puoi scoprire di più sulle chiavi qui. (I7986d)- La funzione
lazyPagingItems.getAsState(index)
è stata ritirata. Utilizza invecelazyPagingItems[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
- Gli elementi itemCount e item getter di LazyPagingItems sono ora osservabili, il che consente di utilizzarli anche con LazyVerticalGrid (Ie2446, b/171872064, b/168285687)
Compatibilità di Componi
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
androidx.paging:paging-compose:1.0.0-alpha08
viene rilasciato. La versione 1.0.0-alpha08 contiene questi commit.
Aggiornamento 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.
Aggiornamento 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
Aggiornata la dipendenza 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 praticità
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
per passare daLoading
aNotLoading
solo dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoading
per garantire che l'aggiornamento remoto sia stato applicato. (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.
- Aggiornamento in base 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 all'API
- Sono stati aggiunti i metodi
.peek()
,.snapshot()
,.retry()
e.refresh()
aiLazyPagingItem
che espongono la stessa funzionalità disponibile 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'elemento 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 IllegalStateException (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 di Paging 2.x.x è stata ritirata a favore delle nuove API Paging 3 per apportare i seguenti miglioramenti:
- Supporto di primo livello per le coroutine e Flow di Kotlin
- Assistenza per l'annullamento
- Indicatori di stato di carica ed errori integrati
- Funzionalità di aggiornamento e riprova
- Tutti e tre i sottoclassi DataSource sono stati combinati in una classe PagingSource unificata
- Trasformazioni di pagine personalizzate, inclusa una integrata per l'aggiunta di separatori
- Caricamento intestazioni e piè di pagina dello stato
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
- È stato risolto un problema per cui a volte Paging inviava eventi di differenza senza operazioni a RecyclerView, il che poteva causare l'attivazione anticipata di determinati ascoltatori. (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 reloaded per evitare salti imprevisti in RecyclerView. Per informazioni dettagliate, consulta NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- I vari generatori di PagedList (vecchio percorso di compatibilità) non chiamano più in modo errato in modo sincrono
DataSource.Factory.create()
sul 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 all'API
- Le estensioni Rx3 ora propagano correttamente
@ExperimentalCoroutinesApi
il 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 limitazioni all'utilizzo pubblico delle API sperimentali (I6aa29, b/174531520)
- È stato risolto un bug che causava sempre
PagingState
null
quando veniva chiamato l'aggiornamento remoto. - È stato corretto un bug per cui le pagine vuote restituite da PagingSource potevano impedire a Paging di eseguire nuovamente il recupero per soddisfare
prefetchDistance
, causando il "blocco" di Paging.
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 all'API
- I wrapper Rx2 e Rx3 ora espongono l'annotazione sperimentale da cui dipendono. Se utilizzi i wrapper Rx compat in paging-rxjava2 o
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d)
Correzioni di bug
- È stato corretto un errore
IndexOutOfBoundsException: Inconsistency detected
che a volte si verifica quando si utilizzano le APIDataSource
v2 tramite percorsi di compatibilità - La chiamata
isInvalid
durante l'inizializzazione diDataSource
, se utilizzata tramite percorsi di compatibilità, ora viene lanciata correttamente su fetchDispatcher anziché sul thread principale. Questo corregge unIllegalStateException
a causa dell'accesso al database nel thread principale quando si utilizza l'implementazionePagingSource
di Room.
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 all'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'implementazione predefinita, che restituisce semplicementenull
, magetRefreshKey()
dovrebbe avere un'implementazione reale che restituisce una chiave in base alla posizione di scorrimento corrente dell'utente che consente a Paging di continuare a caricare centrato sulla visualizzazione tramitePagingState.anchorPosition
, se possibile. (I4339a) InvalidatingPagingSourceFactory
è ora un corso finale (Ia3b0a)- Consenti la configurazione del comportamento del separatore del terminale (intestazione / piè di pagina) con un parametro SeparatorType facoltativo aggiuntivo. Le due opzioni sono:
FULLY_COMPLETE
- comportamento esistente: attendi che sia PagingSource sia Mediatore remoto contrassegnino endOfPaginationReached prima di aggiungere i separatori di fine. Se RemoteMediator non viene utilizzato, loadState remoto viene ignorato. Questa opzione è utile soprattutto se vuoi mostrare i separatori di sezione solo quando la sezione è completamente caricata, incluso il recupero da una fonte remota, ad esempio una rete.SOURCE_COMPLETE
: attendi solo che PagingSource contrassegni endOfPaginationReached anche se viene utilizzato RemoteMediator. In questo modo, le intestazioni e i piè di pagina vengono visualizzati in modo sincrono con il caricamento iniziale, evitando agli utenti di dover scorrere per visualizzare i separatori di fine. (Ibe993, b/174700218)
Correzioni di bug
- È stato corretto un raro problema di perdita di memoria che si verifica quando un PagingSource viene invalidato prima che PageFetcher possa iniziare a caricarlo. (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 all'API
- InvalidatingPagingSourceFactory non è più una classe astratta poiché non ha mai avuto metodi astratti. (I4a8c4)
- È stato aggiunto un sovraccarico di .cachedIn() che accetta ViewModel instead of Lifecycle o CoroutineScope per gli utenti Java. (I97d81, b/175332619)
- Consenti agli utenti chiamanti Java di utilizzare le operazioni di trasformazione di PagingData in modo asincrono, accettando un Executor negli argomenti dell'operatore di trasformazione. Ora il suffisso -Sync è stato rimosso da tutti gli operatori di trasformazione -Sync e gli utenti di Kotlin Coroutine dovranno eliminare l'ambiguità chiamando la funzione di estensione che accetta un blocco di sospensione.
Tutti gli operatori di trasformazione di PagingData sono stati spostati nelle estensioni
sotto la classe statica PagingDataTransforms. Gli utenti Java dovranno chiamarli tramite helper statici, ad esempio
PagingDataTransforms.map(pagingData, transform)
Per gli utenti di Kotlin, la sintassi è la stessa, ma dovrai importare la funzione. (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 della paginazione.
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à
- È stato aggiunto il supporto dello stato salvato per i seguenti casi d'uso di base (il supporto completo, in particolare per le origini a più livelli, è ancora in fase di sviluppo):
- il flusso viene memorizzato nella cache e l'applicazione non viene interrotta (ad es. il flusso viene memorizzato nella cache in un modello di visualizzazione e l'attività viene ricreata durante il processo)
- l'origine di paginazione viene conteggiata, i segnaposto sono attivati e il layout non è alternato.
Modifiche all'API
PagingSource.getRefreshKey()
ora è un'API stabile (I22f6f, b/173530980)PagingSource.invalidate
non è più una funzione aperta. Se devi ricevere una notifica quando si verifica l'invalidazione, ti consigliamo di chiamare il metodo registerInvalidatedCallback anziché eseguire l'override di invalidate. (I628d9, b/173029013, b/137971356)- Pager ora ha un singolo costruttore sperimentale insieme ai suoi costruttori regolari, anziché consentire la fuga di API sperimentali nell'API pubblica non sperimentale tramite l'annotazione di attivazione. (I9dc61, b/174531520)
- Sono state aggiornate le proprietà di praticità
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
per passare daLoading
aNotLoading
solo dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoading
per garantire che l'aggiornamento remoto sia stato applicato. (I65619) LoadParams.pageSize è stato rimosso (era già ritirato). Ti consigliamo di utilizzare
LoadParams.loadSize
in PagingSource.LoadParams.loadSize
è sempre uguale aPagingConfig.pageSize
tranne che per la chiamata di caricamento iniziale, in cui è uguale aPagingConfig.initialLoadSize
.Se stai testando l'origine dati Paging2 senza utilizzare un Pager o PagedList,
pageSize
potrebbe non corrispondere aPagingConfig.pageSize
se imposti ancheinitialLoadSize
. Se è importante per i tuoi test, prova a utilizzare un Pager/PagedList che imposterà internamente il valore PageSize corretto per i metodi di caricamento di DataSource. (I98ac7, b/149157296)
Correzioni di bug
- È stato corretto un arresto anomalo a causa di IllegalStateException quando si utilizzano i separatori con PagingConfig.maxSize impostato. (I0ed33, b/174787528)
- È stato corretto un bug per cui lo stato di caricamento per PREPEND / APPEND non veniva aggiornato su
NotLoading(endOfPaginationReached = true)
immediatamente dopo il caricamento iniziale se era impostato RemoteMediator (I8cf5a) - È stato corretto un bug per cui le API lato presentatore, come .snapshot(), .peek() e così via, restituivano l'elenco precedente (obsoleto) negli aggiornamenti di ListUpdateCallback.
- È stato corretto un bug per cui gli operatori di separatori non aggiungevano intestazioni o piè di pagina se utilizzati con RemoteMediator
- È stato corretto un bug per cui gli aggiornamenti di LoadState a NotLoading per RemoteMediator si bloccavano nello stato Loading
- È stato corretto un bug per cui l'API di compatibilità Paging2.0,
.asPagingSourceFactory()
, poteva causare l'inizializzazione delDataSource
di supporto sul CoroutineDispatcher errato. In questo modo vengono risolti un arresto anomalo e possibili casi di ANR, in particolare quando si utilizza l'attuale implementazione di PagingSource di Room, 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 all'API
Le API
dataRefreshFlow
edataRefreshListener
deprecate sono state rimosse poiché sono ridondanti con gli aggiornamenti di loadStateFlow / Listener. Per coloro che eseguono la migrazione, l'equivalente di 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ù a Paging di avviare i caricamenti di
PREPEND
oAPPEND
. (I3e702, b/168169730) - È stato risolto un problema per cui
getRefreshKey
non viene chiamato nelle generazioni successive di PagingSource quando si verificano convalide rapide. (I45460, b/170027530)
Contributo esterno
- È stata aggiunta una nuova classe astratta InvalidatingPagingSourceFactory con un'API
.invalidate()
che inoltra l'invalidazione a tutti i PagingSource 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 l'arresto anomalo di
LoadState
remoto se l'invalidazione ePagingSource.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 all'API
- Ritirare completamente i metodi dataRefreshFlow / Listener con una clausola replaceWith. (I6e2dd)
Correzioni di bug
- Correzione dell'errore
IllegalArgumentException
che si verifica quando si utilizzano i separatori con RemoteMediator e viene attivata un'invalidazione 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 all'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). Inoltre, viene corretto un bug per cui la variante Kotlin dei callback di invalidate non veniva chiamata dopo la trasformazione da.map
o.mapByPage
. (I1f244, b/165313046)
Correzioni di bug
- L'interazione della paginazione con ViewPager è stata notevolmente migliorata. Nello specifico, la funzionalità di paginazione non annullerà più una chiamata
RemoteMediator#load
a causa di una mancata convalida della pagina. Inoltre, non effettuerà più una richiesta di caricamento di accodamento/precedente, se è richiesto REFRESH, fino al completamento della richiesta REFRESH. (I6390b, b/162252536) - Il controllo lint dell'API per MissingGetterMatchingBuilder è abilitato per androidx (I4bbea, b/138602561)
- È stato corretto un bug per cui gli aiuti
.withLoadState*
ConcatAdapter
si arrestavano in modo anomalo a causa della notifica di RecyclerView dal thread in background (I18bb5, b/170988309) - È stato corretto un bug per cui il caricamento di una pagina molto piccola non vuota a volte impediva il corretto azionamento dei caricamenti tramite il prefetch.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 all'API
- Gli operatori Async PagingData basati su Guava ora accettano un Executor come parametro per controllare il contesto di esecuzione. (Id4372)
Correzioni di bug
- È stata corretta l'eccezione IndexOutOfBounds lanciata in RemoteMediator a causa di una condizione di gara. (I00b7f, b/165821814)
- È stata corretta una condizione di gara nella conversione di DataSource in PagingSource che poteva causare l'ignoranza da parte di PagingSource dei segnali di invalidazione di DataSource.
- È stato risolto un problema nella logica di recupero delle pagine che a volte causava la mancata rilevazione di nuove generazioni di PagingSource fino all'attivazione di PagingDataAdapter.refresh().
- È stato risolto un problema che a volte causava la perdita della posizione di scorrimento quando si utilizzava un DataSource convertito in un PagingSource (come quello prodotto da Room), in combinazione con 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
androidx.paging:paging-*:3.0.0-alpha06
viene rilasciato. La versione 3.0.0-alpha06 contiene questi commit.
Modifiche all'API
UnsupportedOperationException
con messaggi più chiari sulla mancanza di supporto per gli ID stabili ora viene generato ogni volta che viene chiamatoPagingDataAdapter.setHasStableIds
. (Ib3890, b/158801427)
Correzioni di bug
- insertSeparators non filtra più le pagine vuote, consentendo al presentatore di rispettare la distanza di precarica 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
- La paginazione ora esegue il pre-caricamento delle pagine anche quando i dati presentati sono sottoposti a filtri molto rigidi
- Il ritorno a
LoadResult.Error
per un nuovo tentativo di caricamento non causa più l'attivazione errata del nuovo tentativo per gli accessi agli articoli
Contributo esterno
- Grazie a Clara F per aver contribuito a risolvere alcuni problemi di 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 all'API
- È stata aggiunta l'API
peek()
aAsyncPagingDataDiffer
ePagingDataAdapter
per consentire l'accesso ai dati presentati senza attivare il caricamento delle pagine. (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 completamento dell'aggiornamento iniziale o semplicemente per testare le trasformazioni. (Id134d) - Le API di flusso / ascoltatore dataRefresh sono state ritirate perché dovevano esporre lo stato degli elementi presentati su REFRESH, ma con i miglioramenti ai tempi di callback del flusso / dell'ascoltatore loadState e alla proprietà itemCount, sono ridondanti (Ia19f3)
- Aggiunti wrapper di compatibilità RxJava3 per
PagingSource
eRemoteMediator
(I49ef3, b/161480176)
Correzioni di bug
PositionalDataSource
convertiti inPagingSource
tramitetoPagingSourceFactory
helper, inclusi iPagingSource
generati da Room ora si conteggiano correttamente per supportare il salto. (I3e84c, b/162161201)- È stato corretto un bug per cui l'utilizzo della variante sincrona di submitData talvolta causava una condizione di gara che generava un
ClosedSendChannelException
(I4d702, b/160192222)
Contributo esterno
- Grazie a Zac Sweers per aver aggiunto i 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 all'API
- Il costruttore di PagingState è ora pubblico, il che dovrebbe semplificare i test delle implementazioni di getRefreshKey() (I8bf15)
- Sono state nascoste le varianti della funzione di mappatura kotlin di DataSource da Java per risolvere l'ambiguità tra le varianti originali e quelle Kotlin. (If7b23, b/161150011)
- Le API ridondanti intese come comodità per gli utenti di Kotlin sono state contrassegnate come @JvmSynthetic (I56ae5)
- Sono stati aggiunti sovraccarichi per il costruttore di LoadResult.Page che imposta per impostazione predefinita itemsBefore e itemsAfter su COUNT_UNDEFINED (I47849)
- È stato fatto in modo che gli operatori PagingData esistenti accettino metodi di sospensione e sono stati introdotti nuovi operatori mapSync, flatMapSync e filterSync non in sospensione per gli utenti Java. I metodi di trasformazione esistenti sono stati trasferiti alle funzioni di estensione, pertanto gli utenti di Kotlin ora dovranno importarli. (I34239, b/159983232)
Correzioni di bug
- Ora le origini di paging Room (e PositionalDataSource) mostreranno un separatore iniziale all'interno della prima pagina, in modo che l'utente non debba scorrere per visualizzarlo. (I6f747, b/160257628)
- Ora gli accessi agli elementi sui segnaposto attivano correttamente i caricamenti di PagingSource finché non viene restituita una pagina che soddisfa l'indice richiesto dopo essere stata trasformata da PagingData.filter() (I95625, b/158763195)
- Correzione di un bug per cui a volte lo scorrimento dopo che PagingSource restituisce un errore poteva impedire il nuovo tentativo di PagingDataAdapter.retry(). (I1084f, b/160194384)
- È stato risolto un problema per cui gli accessi agli elementi dopo l'inserimento di una pagina potrebbero non caricare le pagine anche se l'accesso all'elemento rientrava in prefetchDistance (Ie95ae, b/160038730)
- L'impostazione PagingConfig.maxSize non attiva 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 all'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 di adattamento
dataRefreshFlow
edataRefreshListener
ora passano 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 helper a PagingState per l'accesso agli elementi comuni come
isEmpty()
efirstItemOrNull()
(I3b5b6, b/158892717)
Correzioni di bug
- Il pager ora controlla il riutilizzo di PagingSource in fabbrica per evitare il riutilizzo accidentale di PagingSource non validi, che ha generato un errore poco chiaro (I99809, b/158486430)
- Gli errori di REFRESH di RemoteMediator 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 della raccolta simultanea su piùPagingData
quando viene chiamata dopo la versione in sospensione disubmitData
. (I26358, b/158048877) - È stata corretta l'eccezione "cannot collect twice from pager" (Impossibile raccogliere due volte dal pager) che potrebbe 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 Paging è stata aggiornata alla versione 3.0 per attivare diverse nuove funzionalità importanti.
Nuove funzionalità della versione 3.0
- Supporto di primo livello per le coroutine e Flow di Kotlin.
- Supporto per il caricamento asincrono con funzioni di sospensione delle coroutine, primitive RxJava Single o Guava ListenableFuture.
- Indicatori di stato di caricamento ed errori integrati per il design dell'interfaccia utente adattabile, inclusa la funzionalità di nuovo tentativo e aggiornamento.
- Miglioramenti al livello del repository
- Interfaccia semplificata dell'origine dati
- Paginazione semplificata della rete e del database
- Assistenza per gli annullamenti
- Miglioramenti al livello di presentazione
Problemi noti
- La documentazione Javadoc di Paging 3 non è ancora disponibile. Nel frattempo, utilizza le guide linkate 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 rispetto alla 2.1.0.
Correzioni di bug
- Correzione di
IndexOutOfBoundsException
in rari casi durante la conversione di una posizione durante l'invalidazione.
Problema di rilascio
La versione
2.1.1
di Paginazione è stata rilasciata erroneamente da un ramo configurato in modo errato, esponendo API e funzionalità parzialmente implementate in una release futura.La paginazione
2.1.2
contiene la correzione del caricamento al centro originariamente rilasciata nella versione 2.1.1, ma questa volta selezionata correttamente sulla versione 2.1.0. Se attualmente utilizzi la versione 2.1.1, ti consigliamo vivamente di eseguire l'upgrade a questa release.
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 da PositionalDataSources ora sono centrati sull'ultimo accesso quando i segnaposto sono disattivati
Versione 2.1.0
Versione 2.1.0
25 gennaio 2019
La paginazione 2.1.0
viene rilasciata senza modifiche rispetto a 2.1.0-rc01
.
Versione 2.1.0-rc01
6 dicembre 2018
La paginazione 2.1.0-rc01
viene rilasciata senza modifiche rispetto a 2.1.0-beta01
.
Versione 2.1.0-beta01
1 novembre 2018
La paginazione 2.1.0-beta01
viene rilasciata senza modifiche rispetto a 2.1.0-alpha01
.
Versione 2.1.0-alpha01
12 ottobre 2018
La funzionalità di paginazione 2.1.0-alpha01
include due aggiunte importanti: il rilascio di pagine e le librerie di estensioni KTX per ogni elemento, oltre a diverse altre modifiche all'API e correzioni di bug.
Modifiche all'API
- È stato aggiunto
PagedList.Config.Builder.setMaxSize()
per limitare il numero di elementi caricati in memoria. - È stato aggiunto
androidx.paging.Config()
come alternativa Kotlin perPagedList.Config.Builder
- È stato aggiunto
androidx.paging.PagedList()
come alternativa Kotlin perPagedList.Builder
- È stato aggiunto
DataSourceFactory.toLiveData()
come alternativa Kotlin perLivePagedListBuilder
- Sono stati aggiunti
DataSourceFactory.toObservable()
etoFlowable()
come alternative Kotlin perRxPagedListBuilder
- È stato aggiunto
AsyncPagedListDiffer.addPagedListListener()
per ascoltare quando PagedList viene scambiato. b/111698609 - È stata aggiunta la variante
PagedListAdapter.onCurrentListChanged()
che passa l'elenco precedente e quello nuovo. La variante precedente è stata ritirata. - Sono state aggiunte le varianti
PagedListAdapter/AsyncPagedListDiffer.submitList()
che accettano un callback aggiuntivo che si attiva se/quando viene visualizzato l'elenco paginato dopo il confronto. In questo modo puoi sincronizzare uno scambio di PagedList con altri aggiornamenti dell'interfaccia utente. b/73781068 PagedList.getLoadedCount()
aggiunto per informarti su quanti elementi sono in memoria. Tieni presente che il valore restituito è sempre uguale a.size()
se i segnaposto sono disattivati.
Correzioni di bug
- È stata corretta una condizione di gara durante il confronto se gli elenchi vengono riutilizzati b/111591017
PagedList.loadAround()
ora lanciaIndexOutOfBoundsException
quando l'indice non è valido. In precedenza, poteva verificarsi un arresto anomalo con un'altra eccezione non chiara.- È stato corretto un caso in cui una dimensione di caricamento iniziale estremamente ridotta insieme a dati invariati non comportava ulteriori caricamenti b/113122599
Versione 2.0.0
Versione 2.0.0
1° ottobre 2018
La funzionalità di paginazione 2.0.0
viene rilasciata con un singolo bugfix.
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
- È stato corretto il problema relativo alla scomparsa dei contenuti in alcuni casi di anteposizione (segnaposto disattivati, PositionalDataSource) b/80149146
- (Già rilasciato in
1.0.1
) Sono stati corretti i crash in cuiPagedListAdapter
eAsyncPagedListDiffer
non riuscivano a segnalare gli eventi di spostamento. b/110711937
Dipendenze precedenti ad 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 funzionalità di paginazione 1.0.1
viene rilasciata con un singolo bugfix in runtime
. Ti consigliamo vivamente di utilizzare 1.0.1
per la stabilità. È stato rilasciato anche 1.0.1
di RxJava2, che è identico a 1.0.0-rc1
.
Correzioni di bug
- Sono stati corretti gli arresti anomali che si verificavano quando
PagedListAdapter
eAsyncPagedListDiffer
non riuscivano a segnalare gli eventi di spostamento. b/110711937
RxJava2 versione 1.0.0
RxJava2 versione 1.0.0-rc1
16 maggio 2018
La funzionalità di paginazione di RxJava2 1.0.0-rc1
passerà alla release candidate senza modifiche rispetto alla versione alpha iniziale.
Versione 1.0.0
Versione 1.0.0-rc1
19 aprile 2018 Candidato per la release di Paginazione
Non sono previsti altri problemi noti o nuove funzionalità per il rilascio di 1.0.0
Paging. Esegui l'upgrade dei tuoi progetti per utilizzare 1.0.0-rc1
e aiutaci a testarlo a fondo in modo da poter rilasciare un 1.0.0
solido.
Non sono state apportate modifiche a questa release, che è la stessa di 1.0.0-beta1
.
Versione 1.0.0-beta1
5 aprile 2018
La paginazione sarà in versione beta per un breve periodo di tempo prima di passare alla versione release candidate.
Non prevediamo ulteriori modifiche all'API per Paging 1.0
e lo standard per eventuali modifiche all'API è molto elevato.
Il supporto alpha di RxJava2 per Paging viene rilasciato come modulo facoltativo separato (android.arch.paging:rxjava2:1.0.0-alpha1
)
e verrà temporaneamente sottoposto a versionamento separato fino a quando non sarà stabilizzato.
Questa nuova libreria fornisce un'alternativa RxJava2 a LivePagedListBuilder
, in grado di costruire 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 artefattoandroid.arch.paging:rxjava2
.
Modifiche all'API
Modifiche all'API per chiarire il ruolo degli esecutori nei generatori:
setBackgroundThreadExecutor()
rinominato insetFetchExecutor()
(inPagedList.Builder
eLivePagedListBuilder
)setMainThreadExecutor()
è stato rinominato insetNotifyExecutor()
(inPagedList.Builder
).
È stato modificato il membro
PagedList.mCallbacks
in modo che sia privato.
Correzioni di bug
LivePagedListBuilder
attiva il caricamento iniziale diPagedList
sull'executor specificato, invece che sul pool di thread IO di Arch Components.È stato corretto il comportamento di invalidazione nei wrapper
DataSource
interni (utilizzati per implementareDataSource.map
, nonché il caricamento diPositionalDataSource
con il segnaposto disattivato) b/77237534
Versione 1.0.0-alpha7
21 marzo 2018
La paginazione 1.0.0-alpha7
viene rilasciata insieme ai cicli di vita 1.1.1
. Poiché Paging alpha7 dipende dal trasferimento della classe Function
menzionata sopra, dovrai aggiornare la dipendenza da lifecycle:runtime
a android.arch.lifecycle:runtime:1.1.1
.
La versione alpha7
di Paginazione è prevista come release finale prima del passaggio alla versione beta.
Modifiche all'API
- Gli oggetti
DataSource.LoadParams
ora hanno un costruttore pubblico e gli oggettiDataSource.LoadCallback
sono ora astratti. In questo modo puoi eseguire il wrapping di unDataSource
o testare direttamente unDataSource
con un callback simulato. b/72600421 - Mapper per DataSource e DataSource.Factory
map(Function<IN,OUT>)
consente di trasformare, troncare o decorare i risultati caricati da unDataSource
.mapByPage(<List<IN>,List<OUT>>)
consente lo stesso per l'elaborazione batch (ad es. se gli elementi caricati da SQL devono eseguire query su un database separato, questa operazione può essere eseguita in batch).
PagedList#getDataSource()
viene aggiunto come metodo di praticità b/72611341- Tutte le classi ritirate sono state rimosse dall'API, inclusi i resti del pacchetto
recyclerview.extensions
eLivePagedListProvider
. DataSource.Factory
viene modificato da un'interfaccia a una classe astratta per abilitare la funzionalità della mappa.
Correzioni di bug
- I costruttori sono stati impostati come finali. b/70848565
- L'implementazione di Room
DataSource
è stata ora corretta per gestire le query su più tabelle. Questa correzione è contenuta in Room 1.1.0-beta1, vedi sopra. - È stato corretto un bug per cui
BoundaryCallback.onItemAtEndLoaded
non veniva richiamato perPositionalDataSource
se i segnaposto sono abilitati e le dimensioni totali sono un multiplo esatto delle dimensioni della pagina.
Versione 1.0.0-alpha5
22 gennaio 2018
Correzioni di bug
- Correggere il caricamento della pagina quando i segnaposto sono disattivati b/70573345
- Log aggiuntivi per rintracciare il bug IllegalArgumentException b/70360195 (e correzione speculativa lato Room)
- Correzioni del codice di esempio Javadoc b/70411933, b/71467637