Paging
Questa tabella elenca tutti gli artefatti nel gruppo androidx.paging.
| Elemento | Release stabile | Candidato per la release | Release beta | Release alpha |
|---|---|---|---|---|
| paging-* | 3.3.6 | 3.4.0-rc01 | - | - |
| paging-compose | 3.3.6 | 3.4.0-rc01 | - | - |
Dichiara le dipendenze
Per aggiungere una dipendenza da Paging, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.
Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per
la tua app o il tuo modulo:
Trendy
dependencies { def paging_version = "3.3.6" 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.4.0-rc01" }
Kotlin
dependencies { val paging_version = "3.3.6" 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.4.0-rc01") }
Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione di KTX.
Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze di build.
Feedback
Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa raccolta. Prima di segnalare un nuovo problema, 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 saperne di più, consulta la documentazione di Issue Tracker.
Versione 3.4
Versione 3.4.0-rc01
14 gennaio 2026
androidx.paging:paging-*:3.4.0-rc01 è stato rilasciato. La versione 3.4.0-rc01 contiene questi commit.
Nuove funzionalità
- È stato rimosso il supporto per le seguenti piattaforme KMP:
macosX64,iosX64,watchosX64etvosX64, in linea con il ritiro dei target macosX64 da parte di Jetbrains. (7cb9a4)
Versione 3.4.0-beta01
17 dicembre 2025
androidx.paging:paging-*:3.4.0-beta01 è stato rilasciato. La versione 3.4.0-beta01 contiene questi commit.
Correzioni di bug
- Correzione della condizione di competizione tra i caricamenti
RecyclerVieweRefreshche portano aIndexOutOfBoundsExceptioninRecyclerView. Gli aggiornamenti della UI interrotti a causa di caricamenti continui diRefreshpossono causare la desincronizzazione dello stato di paginazione conRecyclerView. Questo problema viene risolto ripristinando la paginazione allo stato precedente all'aggiornamento se un aggiornamento viene interrotto (ad esempio da un caricamentoRefreshconsecutivo). (I771b0, b/409809768)
Versione 3.4.0-alpha04
10 settembre 2025
androidx.paging:paging-*:3.4.0-alpha04 è stato rilasciato. La versione 3.4.0-alpha04 contiene questi commit.
Modifiche alle API
- È stata aggiunta una nuova API
PagingStateclosestItemAroundPositionper recuperare l'elemento caricato più vicino alla posizione di destinazione e che corrisponde al predicato di input. Può essere utilizzato per generare chiavi di aggiornamento basate sugli elementi in cui l'elemento ancorabile ideale si trova nelle vicinanze, ma non nella posizione target esatta. (I96e5c, b/440187139)
Versione 3.4.0-alpha03
27 agosto 2025
androidx.paging:paging-*:3.4.0-alpha03 è stato rilasciato. La versione 3.4.0-alpha03 contiene questi commit.
Nuove funzionalità
- Paging-common ha aggiunto il desktop come nuovo target Kotlin Multiplatform (KMP). In totale ora supporta JVM(Android e desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) e Web (JavaScript, WasmJS). (Id2483, b/436884811)
- Il test di paginazione ha aggiunto nuovi target Kotlin Multiplatform (KMP). In totale ora supporta JVM(Android e desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) e Web (JavaScript, WasmJS). (I0c543, b/435014650)
- Paging-compose ha aggiunto nuovi target Kotlin Multiplatform (KMP). In totale ora supporta JVM(Android e desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) e Web (JavaScript, WasmJS). (I70d44, b/436884801)
Modifiche alle API
- Spostamento di minSdk predefinito dall'API 21 all'API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
Versione 3.4.0-alpha02
30 luglio 2025
androidx.paging:paging-*:3.4.0-alpha02 è stato rilasciato. La versione 3.4.0-alpha02 contiene questi commit.
Modifiche alle API
PagingData.fromora consente di impostareplaceholdersBeforeeplaceholdersAfter. Tieni presente che lo scorrimento di questi segnaposto non attiva i caricamenti. (I06983)
Versione 3.4.0-alpha01
2 luglio 2025
androidx.paging:paging-*:3.4.0-alpha01 è stato rilasciato. La versione 3.4.0-alpha01 contiene questi commit.
Nuove funzionalità
- La paginazione ha aggiunto i seguenti target KMP: watchos, tvos, mingwX64, watchosDeviceArm64 e linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
Correzioni di bug
- I test delle unità Android che eseguono il pull di Paging 3.3 o versioni successive non genereranno più errori da
PagingLogger(Ia9400, b/331684448) - È stato corretto un bug per cui
RecyclerViewgeneraIndexOutOfBoundsExceptionquando l'utente scorre durante l'aggiornamento diRecyclerView(Id1f16, b/381024738) - È stato corretto un bug per cui la paginazione non riusciva a attivare altri caricamenti durante l'aggiornamento durante lo scorrimento. (I60ca5, b/352586078)
- È stato risolto il problema di arresto anomalo durante lo scorrimento durante l'aggiornamento degli elementi di paginazione. (I8c65a, b/347649763)
Versione 3.3
Versione 3.3.6
12 febbraio 2025
androidx.paging:paging-*:3.3.6 è stato rilasciato. La versione 3.3.6 contiene questi commit.
Correzioni di bug
- I segnali di aggiornamento e riprova inviati durante un aggiornamento iniziale verranno ora archiviati e inviati nuovamente in modo automatico quando il presentatore di impaginazione sarà pronto.
Contributo esterno
Versione 3.3.5
11 dicembre 2024
androidx.paging:paging-*:3.3.5 è stato rilasciato. La versione 3.3.5 contiene questi commit.
Correzioni di bug
- È stato corretto un bug per cui
RecyclerViewgeneraIndexOutOfBoundsExceptionquando l'utente scorre durante l'aggiornamento diRecyclerView. (Id1f16, b/381024738)
Versione 3.3.4
13 novembre 2024
androidx.paging:paging-*:3.3.4 è stato rilasciato. La versione 3.3.4 contiene questi commit.
Correzioni di bug
- I test delle unità Android che eseguono il pull di 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 è stato rilasciato. La versione 3.3.2 contiene questi commit.
Nuove funzionalità
paging-commonepaging-testinghanno aggiunto nuovi target multipiattaforma Kotlin:watchos,tvoselinuxArm64(90c9768), (53e0eca)
Versione 3.3.1
24 luglio 2024
androidx.paging:paging-*:3.3.1 è stato rilasciato. La versione 3.3.1 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui
AsyncPagingDataDiffero le API basate su di esso, comePagingDataAdapterutilizzato conRecyclerView, non riuscivano ad attivare ulteriori 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
RecyclerViewutilizzando unPagingDataAdaptero unAsyncPagingDataDiffer. (I8c65a, b/347649763)
Versione 3.3.0
14 maggio 2024
androidx.paging:paging-*:3.3.0 è stato rilasciato. La versione 3.3.0 contiene questi commit.
Modifiche importanti dalla versione 3.2.0
PagingDataPresenterora è un corso pubblico. Ora i presentatori multipiattaforma possono essere creati in base aPagingDataPresenteranziché richiedere API di impaginazione interne oAsyncPagingDataDifferdipaging-runtime.- Sono stati aggiunti nuovi metodi helper
LoadStateseCombinedLoadStatesinhasErroreisIdleper verificare seLoadStatessi trova nello stato di errore oNotLoading, rispettivamente. È stato aggiunto anche un nuovo metodo di estensione KotlinawaitNotLoading()suFlow<CombinedLoadStates>che attende che un caricamento si stabilizzi nello statoNotLoadingo di errore. PagingData.empty()ora invia gli statiNotLoadingper impostazione predefinita, a meno che non vengano passatiLoadStatespersonalizzati al suo costruttore. Questo comportamento si discosta da quello esistente, in cui non viene inviatoLoadStatesquando viene inviato a unPagingDataAdaptero vengono inviati stati di caricamento quando vengono raccolti comeLazyPagingItems. Quando viene raccolto comeLazyPagingItems, ora visualizzerà anche un elenco vuoto immediatamente dopo la composizione iniziale.
Compatibilità multipiattaforma Kotlin
La paginazione ora include artefatti compatibili con Kotlin Multiplatform, grazie in gran parte al lavoro di upstream del progetto multiplatform-paging di CashApp.
paging-commonha spostato tutte le API Paging 3 sucommoned è ora compatibile con JVM e iOS, oltre che con Android.paging-testingha spostato il suo codice sucommoned è ora compatibile con jvm e iOS, oltre che con Android.paging-composeha spostato il suo codice sucommone distribuisce un artefatto Android, in linea con il supporto multipiattaforma diandroidx.compose.paging-runtime,paging-guava,paging-rxjava2epaging-rxjava3rimarranno disponibili solo su Android.
Versione 3.3.0-rc01
1° maggio 2024
androidx.paging:paging-*:3.3.0-rc01 viene rilasciato senza modifiche in Paging 3.3.0-beta01. La versione 3.3.0-rc01 contiene questi commit.
Versione 3.3.0-beta01
3 aprile 2024
androidx.paging:paging-*:3.3.0-beta01 viene rilasciato senza modifiche 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 è stato rilasciato. La versione 3.3.0-alpha05 contiene questi commit.
Modifiche alle API
- La paginazione ora utilizza l'annotazione
@MainThreadAndroidX per il codice comune. (I78f0d, b/327682438)
Versione 3.3.0-alpha04
6 marzo 2024
androidx.paging:paging-*:3.3.0-alpha04 è stato 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 è stato rilasciato. La versione 3.3.0-alpha03 contiene questi commit.
Nuove funzionalità
PagingDataPresenterora è un corso pubblico. Ora i presentatori multipiattaforma possono essere creati in base aPagingDataPresenteranziché richiedere API di impaginazione interne oAsyncPagingDataDifferdipaging-runtime. (Id1f74, b/315214786)- Sono stati aggiunti nuovi metodi helper
LoadStateseCombinedLoadStatesper verificare seLoadStatessi trova nello stato di errore oNotLoading. È stata aggiunta anche una nuova API che attende unLoadStateFlowfinché un caricamento non si stabilizza nello statoNotLoadingo di errore. (Id6c67)
Cambiamento del comportamento
PagingData.empty()ora invia gli statiNotLoadingper impostazione predefinita, a meno che non vengano passatiLoadStatespersonalizzati al suo costruttore. Questo comportamento si discosta da quello esistente, in cui non viene inviatoLoadStatesquando viene inviato a unPagingDataAdaptero vengono inviati stati di caricamento quando vengono raccolti comeLazyPagingItems. Quando viene raccolto comeLazyPagingItems, ora visualizzerà 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 è stato rilasciato. La versione 3.3.0-alpha02 contiene questi commit.
Compatibilità multipiattaforma Kotlin
La paginazione ora include artefatti compatibili con Kotlin Multiplatform, grazie in gran parte al lavoro di upstream del progetto multiplatform-paging di CashApp. In questo modo, possiamo evitare divergenze tra due repository e mantenerli compatibili.
paging-commonha spostato tutte le API Paging 3 sucommoned è ora compatibile con JVM e iOS, oltre che con Android.paging-testingha spostato il suo codice sucommoned è ora compatibile con jvm e iOS, oltre che con Android.paging-composeha spostato il suo codice sucommone distribuisce un artefatto Android, in linea con il supporto multipiattaforma diandroidx.compose.paging-runtime,paging-guava,paging-rxjava2epaging-rxjava3rimarranno disponibili solo su Android.
Modifiche alle API
- L'interfaccia Logger pubblica, pensata solo per l'uso interno, è stata ritirata (I16e95, b/288623117)
Contributo esterno
- Grazie a veyndan di Cash App per aver contribuito a trasferire 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 ha solo
*-jvme*-androidartefatti. 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 è stato rilasciato. La versione 3.2.1 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui l'API
asSnapshot()dell'artefatto di test di paginazione si bloccava quando veniva passato un flusso creato utilizzandoPagingData.from(List), poichéasSnapshot()non aveva informazioni sul 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.fromche fornisceLoadStates). (I502c3) - Paging Compose ora utilizza internamente
AndroidUiDispatcher.Mainper 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 è stato 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, la cui versione ora corrisponde a tutti gli altri artefatti di Paging. Le modifiche apportate dalla versione 3.1.0 includono:
- Supporto per l'anteprima di un elenco di dati fittizi creando un
PagingData.from(fakeData)e inserendoPagingDatain unMutableStateFlow(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Passa questo flusso nei componenti componibili@Previewcome destinatario dicollectAsLazyPagingItems()per l'anteprima. - Supporto di tutti i layout pigri come
LazyVerticalGrideHorizontalPager, nonché di componenti pigri personalizzati delle librerie Wear e TV. Ciò è stato possibile grazie a nuovi metodi di estensioneLazyPagingItemsdi livello inferioreitemKeyeitemContentType, che ti aiutano a implementare i parametrikeyecontentTypenelle APIitemsstandard già esistenti perLazyColumn,LazyVerticalGride i relativi equivalenti in API comeHorizontalPager. items(lazyPagingItems)eitemsIndexed(lazyPagingItems), che supportano soloLazyListScope, sono stati ritirati.
- Supporto per l'anteprima di un elenco di dati fittizi creando un
- Nuovo artefatto
paging-testingche fornisce API progettate per testare ogni livello dell'app e la sua integrazione con Paging in modo isolato. Ad esempio, includeTestPagerche consente di convalidare il comportamento della tua implementazionePagingSourcepersonalizzata indipendentemente dal pager e dalla UI reale.- API
asPagingSourceFactoryper trasformare unFlow<List<Value>>o unList<Value>statico in unPagingSourceFactoryche può essere passato a un pager nei test asSnapshotEstensione Kotlin suFlow<PagingData<Value>>, che traduceFlow<PagingData<Value>>in unList<Value>diretto.asSnapshot lambdati consente di simulare l'interfaccia utente della tua app tramite API comescrollTooappendScrollWhile, in modo da poter 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:
VERBOSEeDEBUG. I log possono essere abilitati tramite il comandoadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. Questo vale sia per la paginazione con visualizzazioni sia per la paginazione con composizione. - Sono stati aggiunti costruttori per
PagingDataAdaptereAsyncPagingDataDifferche accettanoCoroutineContextanzichéCoroutineDispatcher. - È stata aggiunta una nuova interfaccia funzionale
PagingSourceFactoryche fornisce una superficie API più esplicita rispetto alle precedenti espressioni lambda () ->PagingSource. Questa fabbrica può essere utilizzata per creare un'istanza di Pager.
Versione 3.2.0-rc01
21 giu 2023
androidx.paging:paging-*:3.2.0-rc01 è stato rilasciato. La versione 3.2.0-rc01 contiene questi commit.
Contributo esterno
- Grazie Veyndan per aver contribuito ad allontanare la paginazione dalle specifiche di Android/JVM. (#553, #554, #555, #559)
Versione 3.2.0-beta01
7 giugno 2023
androidx.paging:paging-*:3.2.0-beta01 è stato rilasciato. La versione 3.2.0-beta01 contiene questi commit.
Paging Compose
- Paging Compose ha raggiunto ufficialmente la stabilità dell'API. Pertanto, la versione è stata aggiornata da
1.0.0-alpha20in modo che corrisponda alla versione di tutti gli altri artefatti di impaginazione.
Modifiche alle API
- Sono state rimosse le API
items(LazyPagingItems)eitemsIndexed(LazyPagingItems)obsolete da Paging Compose. Consulta le note di rilascio di Paging Compose1.0.0-alpha20per un esempio delle API di sostituzione. (I9626e)
Versione 3.2.0-alpha06
24 maggio 2023
androidx.paging:paging-*:3.2.0-alpha06 è stato rilasciato. La versione 3.2.0-alpha06 contiene questi commit.
Nuove funzionalità
- È stata aggiunta una nuova interfaccia funzionale
PagingSourceFactoryche fornisce una superficie API più esplicita rispetto alle espressioni lambda() -> PagingSourceesistenti. Questa fabbrica può essere utilizzata per creare un'istanza diPager. (I33165, b/280655188) - È stata aggiunta una nuova API
paging-testingdiList<Value>.asPagingSourceFactory()per ottenere unPagingSourceFactoryche viene caricato solo da un elenco di dati immutabile. 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 in paging-testing ora sono annotate con
@VisibleForTestingper garantire che vengano utilizzate solo nei test. (I7db6e) - L'API
asSnapshotnon richiede più il passaggio di unCoroutineScope. Ora utilizza per impostazione predefinita il contesto ereditato dall'ambito principale. (Id0a78, b/282240990) - I parametri del costruttore
TestPagersono stati riordinati in modo da corrispondere in modo intuitivo all'ordine dei parametri del costruttorePagerreali (I6185a) - È stata eseguita la migrazione dell'utilizzo del tipo lambda
() -> PagingSource<Key, Value>per il test della paginazione al tipoPagingSourceFactory<Key, Value>. (I4a950, b/280655188)
Modifiche al comportamento
- Il dispatcher principale non è più necessario per eseguire i test di
asSnapshotpaging. L'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 è stato rilasciato. La versione 3.2.0-alpha05 contiene questi commit.
Modifiche alle API
- L'API Paging Testing di
asSnapshotora imposta il parametroloadOperationssu una lambda vuota per impostazione predefinita. In questo modo, è possibile chiamareasSnapshotsenza passare alcuna operazione di caricamento per recuperare i dati dal caricamento dell'aggiornamento iniziale. (Ied354, b/277233770)
Miglioramenti della documentazione
- È stata aggiornata la documentazione relativa a
asPagingSourceFactory()per chiarire che si tratta di un metodo di estensione su unFlowche restituisce una factory riutilizzabile per generare istanzePagingSource. (I5ff4f, I705b5) - È stata aggiornata la documentazione sul costruttore
LoadResult.Pageper chiarire la necessità di eseguire l'override diitemsBeforeeitemsAfterper supportare il salto. (Ied354)
Contributi esterni
- Grazie Veyndan per aver contribuito ad allontanare la paginazione 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 è stato rilasciato. La versione 3.2.0-alpha04 contiene questi commit.
Test di paging
- L'artefatto
paging-testingora contiene un metodoasPagingSourceFactoryper creare unpagingSourceFactoryda unFlow<List<Value>>da fornire a un pager. OgniList<Value>>emesso dal flusso rappresenta una generazione di dati impaginati. In questo modo, è più facile eseguire test di paginazione, ad esempio, sulle trasformazioniPagingDatasimulando un'origine dati da cui il pager può raccogliere i dati. (I6f230, b/235528239) L'artefatto
paging-testingè stato ampliato con nuove API adatte alla verifica della correttezza dei dati contenuti in unFlow<PagingData<T>>. Può essere utilizzato, ad esempio, per verificare l'output di unFlow<PagingData<T>>dal livello ViewModel.Questa operazione viene eseguita tramite l'estensione Kotlin su
Flow<PagingData<Value>>, che traduceFlow<PagingData<Value>>in unList<Value>diretto.asSnapshotLa lambdaasSnapshotti consente di simulare la UI della tua app tramite API comescrollTooappendScrollWhilein modo ripetibile e coerente, in modo da poter verificare che lo snapshot dei dati sia corretto in qualsiasi punto del set 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 valuesasSnapshotè un metodosuspendche dovrebbe essere eseguito entrorunTest. Per saperne di più, consulta la pagina Testare le coroutine Kotlin su Android. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
Modifiche alle API
- Le chiamate alla UI a
getItemepeekinAsyncPagingDataDifferePagingDataAdapterora sono contrassegnate correttamente come chiamabili solo sul thread principale. (I699b6) - Sono stati rimossi i caratteri jolly dai tipi generici utilizzati da
TestPager, semplificando 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 è stato 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 ogni livello dell'app e la sua integrazione con Paging 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 dalla UI reale che normalmente dovresti simulare per l'integrazione della paginazione end-to-end.
TestPager deve essere considerato un fake, ovvero un test double che rispecchia l'implementazione reale di Pager e fornisce un'interfaccia API semplificata per testare un PagingSource. Queste API sono API suspend e devono essere eseguite all'interno di runTest, come descritto nella guida per testare le coroutine Kotlin su Android.
Un esempio di queste API in uso è disponibile nei test room-paging, che sono stati sottoposti a refactoring per utilizzare TestPager.
Modifiche alle API
- Consente un'iterazione comoda su
LoadResult.Page.datatramiteLoadResult.Page.iterator(). Ciò consente indirettamente l'utilizzo del metodo della libreria standard Kotlinflattenquando viene fornito unList<LoadResult.Page>, ad esempio con la proprietàpagesdiPagingStatepassata al metodoPagingSource.getRefreshKey. (Ie0718)
Versione 3.2.0-alpha02
10 agosto 2022
androidx.paging:paging-*:3.2.0-alpha02 è stato rilasciato. La versione 3.2.0-alpha02 contiene questi commit.
Nuove funzionalità
- La paginazione ora fornisce i log tramite le classi
AsyncPagingDataDifferoPagingDataAdapterper esporre le informazioni di debug raccolte daPagingData. - I log possono essere abilitati tramite il comando
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)
Correzioni di bug
- È stato corretto l'errore relativo al costruttore
PagingDataDiffermancante quando si utilizzapaging-common:3.2.0-alpha01con runtimepaging-runtime:3.1.1o versioni precedenti.(b/235256201)
Versione 3.2.0-alpha01
1° giugno 2022
androidx.paging:paging-*:3.2.0-alpha01 è stato rilasciato. La versione 3.2.0-alpha01 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti costruttori per
PagingDataAdaptereAsyncPagingDataDifferche accettanoCoroutineContextanzichéCoroutineDispatcher. (Idc878) - Per impostazione predefinita,
PagingData.from()ePagingData.empty()non influiranno più suCombinedLoadStatesper il presentatore. È stato aggiunto un nuovo overload che consente di passaresourceLoadStateseremoteLoadStatesa questi costruttori per mantenere il comportamento esistente di impostazione diLoadStatescome terminale (ovveroNotLoading(endOfPaginationReached = false)), con la possibilità di includere anche gli stati remoti, se necessario. SeLoadStatesnon vengono superati,CombinedLoadStatesprecedenti verranno mantenuti sul lato del presentatore quando ricevePagingDatastatici. (Ic3ce5, b/205344028)
Correzioni di bug
- Il risultato di
PagingSource.getRefreshKey()ora ha la priorità suinitialKeynei casi in cui restituirebbe null, ma è stato impostato uninitialKeynon nullo. (Ic9542, b/230391606)
Contributo esterno
- API :compose:ui:ui-test aggiornata (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 è stato rilasciato. La versione 3.1.1 contiene questi commit.
Correzioni di bug
- Sono stati rimossi gli eventi intermedi
LoadState.NotLoadingtra le generazioni inseriti in modo errato da.cachedIn(). Questa modifica semplifica notevolmente la reazione alle modifiche diLoadStaterimuovendo gli eventiLoadState.NotLoadingridondanti prodotti tra i nuovi tentativi di caricamento non riusciti, durante l'aggiornamento o l'invalidazione.
Versione 3.1.0
17 novembre 2021
androidx.paging:paging-*:3.1.0 è stato rilasciato. La versione 3.1.0 contiene questi commit.
Modifiche importanti dalla versione 3.0.0
- Le API
Flow<PagingData>.observableeFlow<PagingData>.flowablenon sono più sperimentali - Modifiche al comportamento di
LoadState:endOfPaginationReachedora è semprefalseperLoadType.REFRESHsia perPagingSourceche perRemoteMediatorLoadStatesda Paginazione ora attende valori validi sia daPagingSourceche daRemoteMediatorprima di essere emesso a valle. Le nuove generazioni diPagingDataora inizieranno sempre correttamente conLoadingper lo stato di aggiornamento anziché reimpostare erroneamenteNotLoadingin alcuni casi..loadStateFlowe.addLoadStateListenernelle API per presentatori non inviano più in modo ridondante unCombinedLoadStatesiniziale che ha sempre gli stati del mediatore impostati sunull
- L'annullamento delle generazioni precedenti ora avviene in modo rapido in caso di invalidazione / nuove generazioni. Non dovrebbe più essere necessario utilizzare
.collectLatestsuFlow<PagingData>, anche se è comunque consigliabile farlo. PagingSource.LoadResult.Invalidè stato aggiunto come nuovo tipo di reso daPagingSource.load, il che fa sì che la paginazione scarti qualsiasi richiesta di caricamento in attesa o futura a questoPagingSourcee la invalidi. Questo tipo di restituzione è progettato per gestire dati potenzialmente non validi o obsoleti che possono essere restituiti dal database o dalla rete.- Sono state aggiunte le API per presentatore
.onPagesPresentede.addOnPagesUpdatedListener, che vengono attivate in modo sincrono quando le pagine vengono presentate nella UI. 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. 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 era vuota.
Versione 3.1.0-rc01
3 novembre 2021
androidx.paging:paging-*:3.1.0-rc01 è stato rilasciato. La versione 3.1.0-rc01 contiene questi commit.
Correzioni di bug
- È stata corretta una condizione di competizione e una perdita di memoria in .cachedIn() nei casi in cui più eventi di caricamento sono stati inviati da Paging downstream mentre non sono presenti osservatori o tra il momento in cui un osservatore passa a un nuovo PagingData. (Ib682e)
Versione 3.1.0-beta01
13 ottobre 2021
androidx.paging:paging-*:3.1.0-beta01 è stato rilasciato. La versione 3.1.0-beta01 contiene questi commit.
Correzioni di bug
- Risolto un problema per cui molti accessi rapidi agli elementi potevano causare la loro esclusione dalla valutazione in prefetchDistance, causando l'interruzione 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. Questi accessi agli elementi ora vengono memorizzati nel buffer e sincronizzati in ordine di priorità per evitare che vengano eliminati. (aosp/1833273)
Versione 3.1.0-alpha04
29 settembre 2021
androidx.paging:paging-*:3.1.0-alpha04 è stato rilasciato. La versione 3.1.0-alpha04 contiene questi commit.
Modifiche alle API
- Le API
Flow<PagingData>.observableeFlow<PagingData>.flowablenon sono più sperimentali. (Ie0bdd)
Correzioni di bug
- Per LoadStates,
endOfPaginationReachedora è semprefalseperLoadType.REFRESH. In precedenza, era possibile che endOfPaginationReached fossetrueper RemoteMediatorREFRESH, ma non per PagingSource. Questo comportamento è ora consolidato per restituire semprefalse, in quanto non ha mai senso che REFRESH sia terminale ed è ora documentato come parte del contratto API in LoadStates. Quando decidi se la paginazione viene terminata, devi sempre farlo rispettando le direzioni APPEND o PREPEND. (I047b6) LoadStates di Paging ora attende valori validi sia da PagingSource che da RemoteMediator prima di emettere valori downstream tra le generazioni. Ciò impedisce alle nuove generazioni di PagingData di inviare NotLoading in CombinedLoadStates.source.refresh se era già Loading; le nuove generazioni di PagingData ora inizieranno sempre correttamente con Loading per lo stato di aggiornamento anziché reimpostare prima NotLoading in modo errato in alcuni casi.
L'annullamento delle generazioni precedenti ora avviene immediatamente in caso di invalidazione/nuove generazioni. Non è più necessario utilizzare .collectLatest su
Flow<PagingData>, anche se è comunque consigliato farlo. (I0b2b5, b/177351336, b/195028524).loadStateFlowe.addLoadStateListenernelle API del presentatore non inviano più in modo ridondante unCombinedLoadStatesiniziale che ha sempre gli stati del mediatore impostati sunulle gli stati dell'origine impostati suNotLoading(endOfPaginationReached = false). Ciò significa che:- Gli stati del mediatore verranno sempre compilati se utilizzi RemoteMediator.
- La registrazione di un nuovo listener loadState o di un nuovo raccoglitore su
.loadStateFlownon emetterà più immediatamente il valore corrente se non ha ricevuto unCombinedLoadStatesreale daPagingData. Ciò può accadere se un raccoglitore o un listener viene avviato prima dell'invio di unPagingData. (I1a748)
Versione 3.1.0-alpha03
21 luglio 2021
androidx.paging:paging-*:3.1.0-alpha03 è stato rilasciato. La versione 3.1.0-alpha03 contiene questi commit.
Modifiche alle API
A PagingSource viene aggiunto un terzo tipo 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 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 carica (ad es. LIMIT OFFSET). In questo scenario, è consigliabile verificare l'invalidazione dopo il caricamento e restituire LoadResult.Invalid, che fa sì che Paging scarti qualsiasi richiesta di caricamento in attesa o futura a questa PagingSource e la invalidi.
Questo tipo di restituzione è supportato anche dall'API Paging2, che utilizza LivePagedList o RxPagedList. Quando utilizzi un oggetto PagingSource con le API PagedList di Paging2, l'oggetto PagedList viene immediatamente scollegato, interrompendo ulteriori tentativi di caricamento dei dati in questo oggetto PagedList e attivando l'invalidazione in PagingSource.
LoadResult è una classe sigillata, il che significa che si tratta di una modifica incompatibile con l'origine, per cui i casi d'uso che utilizzano direttamente i risultati di PagingSource.load dovranno gestire LoadResult.Invalid in fase di compilazione. Ad esempio, gli utenti Kotlin che utilizzano exhaustive-when per controllare il tipo restituito dovranno aggiungere un controllo per il tipo non valido. (Id6bd3, b/191806126, b/192013267)
Correzioni di bug
- Le callback di invalidazione aggiunte tramite PagingSource.registerInvalidatedCallback o DataSource.addInvalidatedCallback ora vengono attivate automaticamente se sono state registrate in un oggetto PagingSource / DataSource già non valido. In questo modo viene risolta una condizione di competizione che causava l'eliminazione dei segnali di invalidazione della paginazione e il blocco quando veniva fornita una fonte già non valida durante il caricamento iniziale. Inoltre, le callback invalidate vengono ora rimosse correttamente dopo l'attivazione, poiché è garantito che vengano chiamate al massimo una volta. (I27e69)
- Invio del valore iniziale del segnaposto (InitialPagedList) da un flusso PagedList appena istanziato, ad es. 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 è stato rilasciato. La versione 3.1.0-alpha02 contiene questi commit.
Nuove funzionalità
Sono state aggiunte le API listener onPagesPresented e presenter di flusso che vengono attivate immediatamente dopo l'aggiornamento delle pagine presentate nella UI.
Poiché questi aggiornamenti sono sincroni con la UI, puoi chiamare metodi dell'adattatore come .snapshot e .getItemCount per esaminare lo stato dopo l'applicazione dell'aggiornamento. Tieni presente che .snapshot() è stato lasciato per essere chiamato esplicitamente perché può essere costoso da eseguire 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. 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 era vuota (I272c9, b/189999634)
Correzioni di bug
- L'accesso a PagedList.dataSource dal valore iniziale prodotto da LivePagedList o RxPagedList non genererà più in modo errato un'eccezione IllegalStateException (I96707)
Versione 3.1.0-alpha01
2 giugno 2021
androidx.paging:paging-*:3.1.0-alpha01 è stato rilasciato. La versione 3.1.0-alpha01 contiene questi commit.
Modifiche alle API
- Le classi fornite da
paging-rxjava3ora si trovano nel pacchettoandroidx.paging.rxjava3, in modo da non entrare in conflitto conpaging-rxjava2(Ifa7f6).
Correzioni di bug
- È stato risolto un problema per cui la paginazione a volte inviava eventi differ no-op a RecyclerView, il che poteva causare l'attivazione anticipata di determinati listener. (Ic507f, b/182510751)
Contributo esterno
- Sono state aggiunte 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 è stato rilasciato. La versione 1.0.0-alpha20 contiene questi commit.
Nuove funzionalità
- Paging Compose ora supporta l'anteprima di un elenco di dati fittizi creando un
PagingData.from(fakeData)e racchiudendoPagingDatain unMutableStateFlow(ad es.MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). Utilizzando questi dati come input in@Preview, le chiamate acollectAsLazyPagingItems()fornirannoLazyPagingItemsvisualizzabili in anteprima. (I8a78d, b/194544557)
Correzioni di bug
- I dati memorizzati nella cache di
pager.flow.cachedInraccolti inLazyPagingItemssaranno 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 al ripristino dello stato. (I97a60, b/177245496)
Versione 1.0.0-alpha19
3 maggio 2023
androidx.paging:paging-compose:1.0.0-alpha19 è stato rilasciato. La versione 1.0.0-alpha19 contiene questi commit.
Supporto di tutti i layout pigri
In precedenza, Paging Compose forniva estensioni items e itemsIndexed personalizzate su LazyListScope, il che significava che non era possibile utilizzare Paging Compose con altri layout pigri come LazyVerticalGrid, HorizontalPager o altri componenti pigri personalizzati forniti dalle librerie Wear e TV. L'aggiornamento principale di questa release riguarda proprio questa rigidità.
Per supportare più layout pigri, abbiamo dovuto creare API a un livello diverso: anziché fornire un'API items personalizzata per ogni layout pigro, 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 standard items già esistenti per LazyColumn, LazyVerticalGrid, nonché dei loro equivalenti in API come HorizontalPager. (Ifa13b, Ib04f0, b/259385813)
Ciò significa che il supporto di un LazyVerticalGrid avrebbe 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 di LazyColumn e LazyRow più lunghi di qualche riga, abbiamo ritenuto che la coerenza in tutti i layout pigri fosse un fattore importante per chi utilizza Paging Compose in futuro. Per questo motivo, le estensioni esistenti di LazyListScope sono state ritirate. (I0c459, I92c8f, b/276989796)
Modifiche alle API
- Per semplificare la migrazione alle nuove API, le funzioni di estensione
itemseitemsIndexedsuLazyListScopeora supportano un parametrocontentType, rispecchiando 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 è stato rilasciato. La versione 1.0.0-alpha17 contiene questi commit.
Nuove funzionalità
- Aggiungi il supporto per un
CoroutineContextpersonalizzato quando chiamicollectLazyPagingItems. (I7a574, b/243182795, b/233783862)
Versione 1.0.0-alpha16
10 agosto 2022
androidx.paging:paging-compose:1.0.0-alpha16 è stato rilasciato. La versione 1.0.0-alpha16 contiene questi commit.
Nuove funzionalità
- La paginazione ora fornisce i log tramite la classe
LazyPagingItemsper esporre le informazioni di debug raccolte da PagingData. - I log possono essere abilitati tramite il comando
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
Correzioni di bug
- È stato corretto l'errore del costruttore
PagingDataDiffermancante quando si utilizzapaging-compose:1.0.0-alpha15conpaging-common:3.1.1o versioni precedenti.(b/235256201,b/239868768)
Versione 1.0.0-alpha15
1° giugno 2022
androidx.paging:paging-compose:1.0.0-alpha15 è stato rilasciato. La versione 1.0.0-alpha15 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti costruttori per
PagingDataAdaptereAsyncPagingDataDifferche accettanoCoroutineContextanzichéCoroutineDispatcher. (Idc878)
Correzioni di bug
LazyPagingItemsora imposta l'loadStateiniziale in modo che venga eseguito un aggiornamentoLoadState.Loading. (I55043, b/224855902)
Versione 1.0.0-alpha14
13 ottobre 2021
androidx.paging:paging-compose:1.0.0-alpha14 è stato 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 è stato rilasciato. La versione 1.0.0-alpha13 contiene questi commit.
Modifiche alle API
- La funzione
LazyPagingItems.snapshot()è stata sostituita dalla proprietàLazyPagingItems.itemSnapshotList(Ie2da8) - La funzionalità
LazyPagingItems.getAsState()deprecata è stata rimossa (Ie65e4)
Versione 1.0.0-alpha12
21 luglio 2021
androidx.paging:paging-compose:1.0.0-alpha12 è stato rilasciato. La versione 1.0.0-alpha12 contiene questi commit.
Modifiche alle API
items(lazyPagingItems)eitemsIndexed(lazyPagingItems)utilizzati per connettere la paginazione aLazyColumn/Rowora accettano il parametro della 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 ritirata. Utilizza invecelazyPagingItems[index]. (I086cb, b/187339372)
Versione 1.0.0-alpha11
30 giugno 2021
androidx.paging:paging-compose:1.0.0-alpha11 è stato 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 è stato 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 è stato rilasciato. La versione 1.0.0-alpha09 contiene questi commit.
Correzioni di bug
- itemCount e il getter di elementi di LazyPagingItems sono ora osservabili, il che consente di utilizzarli anche con LazyVerticalGrid (Ie2446, b/171872064, b/168285687)
Compatibilità di Scrivi
androidx.paging:paging-compose:1.0.0-alpha09è compatibile solo con Compose versione1.0.0-beta07e successive.
Versione 1.0.0-alpha08
24 febbraio 2021
androidx.paging:paging-compose:1.0.0-alpha08 è stato rilasciato. La versione 1.0.0-alpha08 contiene questi commit.
È stato effettuato un 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 è stato rilasciato. La versione 1.0.0-alpha07 contiene questi commit.
È stato effettuato un aggiornamento per l'integrazione con Compose alpha12.
Versione 1.0.0-alpha06
28 gennaio 2021
androidx.paging:paging-compose:1.0.0-alpha06 è stato rilasciato. La versione 1.0.0-alpha06 contiene questi commit.
Correzioni di bug
È stato effettuato un aggiornamento in modo che dipenda da Compose 1.0.0-alpha11.
Versione 1.0.0-alpha05
13 gennaio 2021
androidx.paging:paging-compose:1.0.0-alpha05 è stato rilasciato. La versione 1.0.0-alpha05 contiene questi commit.
È stato effettuato un aggiornamento in modo che dipenda da Compose 1.0.0-alpha10.
Versione 1.0.0-alpha04
16 dicembre 2020
androidx.paging:paging-compose:1.0.0-alpha04 è stato 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.appendin modo che la transizione daLoadingaNotLoadingavvenga solo dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoadingper 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 è stato rilasciato. La versione 1.0.0-alpha03 contiene questi commit.
- È stato effettuato un aggiornamento in modo che corrisponda a Compose 1.0.0-alpha08.
Versione 1.0.0-alpha02
11 novembre 2020
androidx.paging:paging-compose:1.0.0-alpha02 è stato rilasciato. La versione 1.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti i metodi
.peek(),.snapshot(),.retry()e.refresh()aLazyPagingItems 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 è stato rilasciato. La versione 1.0.0-alpha01 contiene questi commit.
Nuove funzionalità
L'artefatto paging-compose fornisce l'integrazione tra la libreria Paging 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 è stato rilasciato. La versione 3.0.1 contiene questi commit.
Correzioni di bug
- L'accesso a
PagedList.dataSourcedal valore iniziale prodotto daLivePagedListoRxPagedListnon genererà più in modo errato un'eccezione IllegalStateException (I96707)
Versione 3.0.0
Versione 3.0.0
5 maggio 2021
androidx.paging:paging-*:3.0.0 è stato 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 prima classe per le coroutine e Flow di Kotlin
- Assistenza per l'annullamento
- Indicatori di stato del carico ed errore integrati
- Funzionalità di riprova e aggiornamento
- Tutte e tre le sottoclassi DataSource sono state combinate in una classe PagingSource unificata
- Trasformazioni di pagine personalizzate, inclusa una integrata per l'aggiunta di separatori
- Caricamento di intestazioni e piè di pagina dello stato
Versione 3.0.0-rc01
21 aprile 2021
androidx.paging:paging-*:3.0.0-rc01 è stato rilasciato. La versione 3.0.0-rc01 contiene questi commit.
Correzioni di bug
- È stato risolto un problema per cui la paginazione a volte inviava eventi differ no-op a RecyclerView, il che poteva causare l'attivazione anticipata di determinati listener. (Ic507f, b/182510751)
Versione 3.0.0-beta03
24 marzo 2021
androidx.paging:paging-*:3.0.0-beta03 è stato rilasciato. La versione 3.0.0-beta03 contiene questi commit.
Correzioni di bug
- Abbiamo rinnovato la gestione dei segnaposto quando l'elenco viene ricaricato per evitare salti imprevisti in RecyclerView. Per informazioni dettagliate, consulta NullPaddedDiffing.md. (If1490, b/170027529, b/177338149)
- I vari builder PagedList (vecchio percorso di compatibilità) non chiamano più in modo errato e 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 è stato rilasciato. La versione 3.0.0-beta02 contiene questi commit.
Modifiche alle API
- Le estensioni Rx3 ora propagano correttamente
@ExperimentalCoroutinesApiil requisito di attivazione. In precedenza erano contrassegnate nel metodo@get, che viene ignorato dal compilatore Kotlin a causa di: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
Correzioni di bug
- Applica restrizioni all'utilizzo pubblico delle API sperimentali (I6aa29, b/174531520)
- È stato corretto un bug che causava la visualizzazione di
PagingStatesempre comenullquando viene chiamato l'aggiornamento remoto. - È stato corretto un bug per cui le pagine vuote restituite da PagingSource potevano impedire a Paging di recuperare di nuovo i dati per soddisfare
prefetchDistance, causando il blocco di Paging.
Versione 3.0.0-beta01
10 febbraio 2021
androidx.paging:paging-*:3.0.0-beta01 è stato 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
dipendono. Se utilizzi i wrapper di compatibilità Rx in paging-rxjava2 o
paging-rxjava3, ora dovrai annotare gli utilizzi con
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d)
Correzioni di bug
- È stato corretto l'errore
IndexOutOfBoundsException: Inconsistency detectedche a volte si verifica quando si utilizzano le API v2DataSourcetramite percorsi di compatibilità - La chiamata
isInvaliddurante l'inizializzazione diDataSourcequando viene utilizzata tramite percorsi di compatibilità viene ora avviata correttamente su fetchDispatcher anziché sul thread principale. Questo problemaIllegalStateExceptionè stato risolto grazie all'accesso al database sul thread principale quando si utilizza l'implementazionePagingSourcedi Room.
Versione 3.0.0-alpha13
27 gennaio 2021
androidx.paging:paging-*:3.0.0-alpha13 è stato rilasciato. La versione 3.0.0-alpha13 contiene questi commit.
Modifiche alle API
PagingSource.getRefreshKeynon è più facoltativo da implementare, 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()deve avere un'implementazione reale che restituisca una chiave in base alla posizione di scorrimento corrente dell'utente, consentendo a Paginazione di continuare a caricare i contenuti centrati intorno alla visualizzazione tramitePagingState.anchorPosition, se possibile. (I4339a)InvalidatingPagingSourceFactoryè ora una classe finale (Ia3b0a)- Consente la configurazione del comportamento del separatore di terminale (intestazione / piè di pagina) con un parametro SeparatorType facoltativo aggiuntivo. Le due
opzioni sono:
FULLY_COMPLETE: comportamento esistente; attendi che PagingSource e RemoteMediator contrassegnino endOfPaginationReached prima di aggiungere separatori terminali. Se RemoteMediator non viene utilizzato, loadState remoto viene ignorato. Questa opzione è utile principalmente se vuoi mostrare i separatori di sezione solo quando la sezione è completamente caricata, incluso il recupero da un'origine remota, ad esempio una rete.SOURCE_COMPLETE: attende solo che PagingSource contrassegni endOfPaginationReached anche se viene utilizzato RemoteMediator. In questo modo, le intestazioni e i piè di pagina possono essere presentati in modo sincrono con il caricamento iniziale, il che impedisce agli utenti di dover scorrere per visualizzare i separatori del terminale. (Ibe993, b/174700218)
Correzioni di bug
- È stata corretta una rara perdita di memoria che si verifica quando un oggetto PagingSource viene invalidato prima che PageFetcher possa iniziare a caricare i dati. (I9606b, b/174625633)
Versione 3.0.0-alpha12
13 gennaio 2021
androidx.paging:paging-*:3.0.0-alpha12 è stato rilasciato. La versione 3.0.0-alpha12 contiene questi commit.
Modifiche alle API
- InvalidatingPagingSourceFactory non è più una classe astratta in quanto non ha mai avuto metodi astratti. (I4a8c4)
- È stato aggiunto un overload di .cachedIn() che accetta ViewModel anziché Lifecycle o CoroutineScope per gli utenti Java. (I97d81, b/175332619)
- Consente ai chiamanti Java di utilizzare le operazioni di trasformazione PagingData in
modo asincrono, accettando un Executor negli argomenti
dell'operatore di trasformazione. Tutti gli operatori di trasformazione -Sync ora non hanno più il suffisso -Sync
e gli utenti di Kotlin Coroutine dovranno disambiguare chiamando la funzione di estensione che accetta un blocco di sospensione.
Tutti gli operatori di trasformazione PagingData sono stati spostati nelle estensioni
nella classe statica PagingDataTransforms. 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
- È 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 è stato 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 nel caso di origine a livelli, è ancora in fase di sviluppo):
- il flusso viene memorizzato nella cache e l'applicazione non viene chiusa (ad esempio, il flusso viene memorizzato nella cache in un view model e l'attività viene ricreata nel processo)
- L'origine della paginazione viene conteggiata, i segnaposto sono attivati e il layout non è sfalsato.
Modifiche alle API
PagingSource.getRefreshKey()è ora un'API stabile (I22f6f, b/173530980)PagingSource.invalidatenon è più una funzione aperta. Se devi ricevere una notifica quando si verifica l'invalidazione, valuta la possibilità di chiamare il metodo registerInvalidatedCallback anziché eseguire l'override di invalidate. (I628d9, b/173029013, b/137971356)- Ora Pager ha un unico costruttore sperimentale insieme ai suoi costruttori regolari, anziché inserire 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.appendin modo che la transizione daLoadingaNotLoadingavvenga solo dopo che gli stati di caricamento del mediatore e dell'origine sonoNotLoadingper garantire che l'aggiornamento remoto sia stato applicato. (I65619) LoadParams.pageSize è stato rimosso (era già obsoleto). Il suggerimento è di utilizzare
LoadParams.loadSizein PagingSource.LoadParams.loadSizeè sempre uguale aPagingConfig.pageSize, tranne per la chiamata di caricamento iniziale, in cui è uguale aPagingConfig.initialLoadSize.Se stai testando la tua origine dati Paging2 senza utilizzare un pager o un PagedList,
pageSizepotrebbe non corrispondere aPagingConfig.pageSizese stai impostando ancheinitialLoadSize. Se è importante per i tuoi test, prova a utilizzare un Pager/PagedList che imposterà internamente il PageSize corretto per i metodi di caricamento di DataSource. (I98ac7, b/149157296)
Correzioni di bug
- Risolto un arresto anomalo dovuto a IllegalStateException quando si utilizzano separatori con PagingConfig.maxSize impostato. (I0ed33, b/174787528)
- È stato corretto un bug per cui lo stato di caricamento per PREPEND / APPEND non veniva
aggiornato a
NotLoading(endOfPaginationReached = true)immediatamente dopo il caricamento iniziale se RemoteMediator era impostato (I8cf5a) - È stato corretto un bug per cui le API lato presentatore come .snapshot(), .peek() e così via restituivano l'elenco precedente (non aggiornato) negli aggiornamenti di ListUpdateCallback.
- È stato corretto un bug per cui gli operatori 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 rimanevano bloccati nello stato di caricamento
- È stato corretto un bug per cui l'API di compatibilità Paging 2.0,
.asPagingSourceFactory(), poteva causare l'inizializzazione diDataSourcedi supporto sul CoroutineDispatcher errato. In questo modo si risolve un arresto anomalo e possibili casi di ANR, soprattutto quando si utilizza l'implementazione attuale 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 è stato rilasciato. La versione 3.0.0-alpha10 contiene questi commit.
Modifiche alle API
Le API
dataRefreshFlowedataRefreshListenerdeprecate sono state rimosse in quanto ridondanti con gli aggiornamenti di loadStateFlow / Listener. Per gli utenti che eseguono la migrazione, l'equivalente di loadStateFlow è:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
Correzioni di bug
- endOfPaginationReached per RemoteMediator
REFRESHora si propaga correttamente agli aggiornamenti di LoadState e impedisce l'attivazione diAPPENDePREPENDda remoto. (I94a3f, b/155290248) - La visualizzazione di un elenco vuoto a causa di una pagina iniziale vuota o
di un filtro pesante non impedirà più l'avvio della paginazione
PREPENDo i caricamentiAPPEND. (I3e702, b/168169730) - Risolto un problema per cui
getRefreshKeynon viene chiamato nelle generazioni successive di PagingSource quando si verificano invalidazioni rapide. (I45460, b/170027530)
Contributo esterno
- È stata aggiunta una nuova classe astratta InvalidatingPagingSourceFactory
con un'API
.invalidate()che inoltra l'invalidazione a tutte le 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 il blocco di
LoadStateremoto 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 è stato rilasciato. La versione 3.0.0-alpha09 contiene questi commit.
Modifiche alle API
- Depreca completamente i metodi dataRefreshFlow / Listener con una clausola replaceWith. (I6e2dd)
Correzioni di bug
- Correzione dell'errore
IllegalArgumentExceptiongenerato quando si utilizzano separatori con RemoteMediator e viene attivato un invalidamento 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 è stato rilasciato. La versione 3.0.0-alpha08 contiene questi commit.
Modifiche alle API
- Le varianti Kotlin / Java di
DataSource.InvalidatedCallbacksono state combinate attivando le conversioni SAM in Kotlin tramite l'interfaccia funzionale (disponibile in Kotlin 1.4). Inoltre, viene corretto un bug per cui i callback di invalidazione della variante Kotlin non venivano chiamati dopo la trasformazione da parte di.mapo.mapByPage. (I1f244, b/165313046)
Correzioni di bug
- L'interazione di Paging con ViewPager è stata notevolmente migliorata. In particolare, Paging non annullerà più una chiamata
RemoteMediator#loada causa dell'invalidazione di una pagina. Inoltre, non effettuerà più una richiesta di caricamento di aggiunta/anteposizione, se è necessario REFRESH, finché la richiesta REFRESH non viene completata correttamente. (I6390b, b/162252536) - Il controllo lint API per MissingGetterMatchingBuilder è abilitato per androidx (I4bbea, b/138602561)
- È stato corretto un bug per cui gli helper
.withLoadState*ConcatAdaptersi 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 non vuota molto piccola a volte impediva il corretto caricamento del prefetch.Iffda3 b/169259468
Versione 3.0.0-alpha07
1° ottobre 2020
androidx.paging:paging-*:3.0.0-alpha07 è stato rilasciato. La versione 3.0.0-alpha07 contiene questi commit.
Modifiche alle API
- Gli operatori basati su Guava Async PagingData ora accettano un Executor come parametro per controllare il contesto di esecuzione. (Id4372)
Correzioni di bug
- È stata corretta l'eccezione IndexOutOfBounds generata in RemoteMediator a causa di una race condition. (I00b7f, b/165821814)
- È stata corretta una condizione di competizione nella conversione da DataSource a PagingSource che poteva causare l'ignoramento dei segnali di invalidazione da parte di PagingSource risultante.
- È stato risolto un problema nella logica di recupero delle pagine che a volte impediva di rilevare le nuove generazioni di PagingSource finché non veniva richiamato PagingDataAdapter.refresh()
- È stato risolto un problema che a volte causava la perdita della posizione di scorrimento quando si utilizzava un'origine dati convertita in un oggetto PagingSource (ad esempio quello prodotto da Room) insieme a RemoteMediator
Contributo esterno
- Grazie a @simonschiller per aver aggiunto gli operatori di trasformazione asincrona basati su RxJava2, RxJava3 e Guava per PagingData.
Versione 3.0.0-alpha06
2 settembre 2020
androidx.paging:paging-*:3.0.0-alpha06 è stato rilasciato. La versione 3.0.0-alpha06 contiene questi commit.
Modifiche alle API
UnsupportedOperationExceptioncon messaggi più chiari relativi alla mancanza di supporto per gli ID stabili viene ora generato ogni volta che viene chiamatoPagingDataAdapter.setHasStableIds. (Ib3890, b/158801427)
Correzioni di bug
- insertSeparators non filtra più le pagine vuote, consentendo alla distanza di prefetch di essere rispettata dal presentatore 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 è stato rilasciato. La versione 3.0.0-alpha05 contiene questi commit.
Correzioni di bug
- La paginazione ora precarica correttamente le pagine anche quando i dati presentati sono fortemente filtrati
- Il ritorno di
LoadResult.Errora un caricamento riprovato non causa più il nuovo tentativo di attivazione errato degli accessi agli elementi
Contributo esterno
- Grazie a Clara F per averci aiutato a ripulire alcuni test. (549612)
Versione 3.0.0-alpha04
5 agosto 2020
androidx.paging:paging-*:3.0.0-alpha04 è stato rilasciato. La versione 3.0.0-alpha04 contiene questi commit.
Modifiche alle API
- È stata aggiunta l'API
peek()aAsyncPagingDataDifferePagingDataAdapterper consentire l'accesso ai dati presentati senza caricamenti della pagina di attivazione. (I38898, b/159104197) - È stata aggiunta un'API
snapshot()aPagingDataAdaptereAsyncPagingDataDifferper 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 PagingData complessivo per mostrare elenchi statici in determinati stati, ad esempio prima del completamento dell'aggiornamento iniziale o semplicemente per testare le trasformazioni. (Id134d) - Ritira le API DataRefresh Flow / Listener perché erano destinate a esporre lo stato degli elementi presentati durante l'aggiornamento, ma con i miglioramenti alla tempistica del callback di loadState Flow / Listener e alla proprietà itemCount, sono ridondanti (Ia19f3)
- Sono stati aggiunti wrapper di compatibilità RxJava3 per
PagingSourceeRemoteMediator(I49ef3, b/161480176)
Correzioni di bug
PositionalDataSourceconvertiti inPagingSourcetramite l'helpertoPagingSourceFactory, inclusiPagingSourcegenerati da Room ora si contrassegnano correttamente per supportare il salto. (I3e84c, b/162161201)- È stato corretto un bug per cui l'utilizzo della variante sincrona di submitData
a volte causava una condizione di competizione 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 è stato rilasciato. La versione 3.0.0-alpha03 contiene questi commit.
Modifiche alle API
- Il costruttore per PagingState ora è pubblico, il che dovrebbe semplificare il test delle implementazioni di getRefreshKey() (I8bf15)
- Varianti della funzione di mapping Kotlin di DataSource nascoste da Java, per risolvere l'ambiguità tra le varianti originali e Kotlin. (If7b23, b/161150011)
- Le API ridondanti destinate a semplificare l'utilizzo per gli utenti Kotlin sono state contrassegnate con @JvmSynthetic (I56ae5)
- Aggiunta di overload per il costruttore di LoadResult.Page che imposta per impostazione predefinita itemsBefore e itemsAfter su COUNT_UNDEFINED (I47849)
- Gli operatori PagingData esistenti accettano metodi di sospensione e sono stati introdotti nuovi operatori non di sospensione 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
- Le PagingSources di Room (e PositionalDataSource) ora mostreranno un separatore iniziale come parte della prima pagina, in modo che l'utente non debba scorrere per visualizzarlo. (I6f747, b/160257628)
- Gli accessi agli elementi nei segnaposto ora 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 PagingSource restituisce un errore che potrebbe impedire a PagingDataAdapter.retry() di riprovare. (I1084f, b/160194384)
- Corregge un problema per cui gli accessi agli elementi dopo l'eliminazione di una pagina potrebbero non caricare le pagine anche se l'accesso all'elemento rientrava in prefetchDistance (Ie95ae, b/160038730)
- L'impostazione di 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 è stato rilasciato. La versione 3.0.0-alpha02 contiene questi commit.
Modifiche alle API
- Sono stati aggiunti overload per il costruttore di
PagingConfigcon valori predefiniti comuni (I39c50, b/158576040) - Sono stati aggiunti overload per i costruttori di
PagingDataAdaptereAsyncPagingDataDiffercon valori predefiniti comuni (Ie91f5) - Le API dell'adattatore,
dataRefreshFlowedataRefreshListener, ora passano un valore booleano per segnalare se unPagingDataè vuoto (I6e37e, b/159054196) - Sono state aggiunte le API RxJava e Guava per RemoteMediator: RxRemoteMediator e ListenableFutureRemoteMediator
- Sono stati aggiunti helper a PagingState per l'accesso comune agli elementi, ad esempio
isEmpty()efirstItemOrNull()(I3b5b6, b/158892717)
Correzioni di bug
- Pager ora verifica il riutilizzo di PagingSource in factory per evitare il riutilizzo accidentale di PagingSource non valide, che generavano 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 sospensiva di
submitDatanon causa più un arresto anomalo dovuto alla raccolta simultanea su piùPagingDataquando viene chiamata dopo la versione sospensiva disubmitData. (I26358, b/158048877) - È stata corretta l'eccezione "cannot collect twice from 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 è stato rilasciato. La versione 3.0.0-alpha01 contiene questi commit.
La libreria Paging è stata aggiornata alla versione 3.0 per attivare diverse nuove funzionalità principali.
Nuove funzionalità della versione 3.0
- Supporto di prima classe per le coroutine e Flow di Kotlin.
- Supporto del caricamento asincrono con funzioni di sospensione delle coroutine, primitive RxJava Single o Guava ListenableFuture.
- Stato di caricamento e indicatori di errore integrati per la progettazione di UI reattive, inclusa la funzionalità di riprova e aggiornamento.
- Miglioramenti al livello del repository
- Interfaccia semplificata dell'origine dati
- Impaginazione semplificata di rete e database
- Assistenza per gli annullamenti
- Miglioramenti al livello di presentazione
Problemi noti
- I javadoc di Paging 3 non sono ancora disponibili. Nel frattempo, utilizza le guide collegate 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 è stato rilasciato. La versione 2.1.2 contiene questi commit rispetto alla versione 2.1.0.
Correzioni di bug
- Correzione di
IndexOutOfBoundsExceptionin rari casi durante la conversione di una posizione durante l'annullamento.
Problema di rilascio
La versione di impaginazione
2.1.1è stata rilasciata in modo errato da un ramo configurato in modo errato, esponendo API e funzionalità implementate parzialmente in una release futura.Il paging
2.1.2contiene la correzione del bilanciamento del carico originariamente rilasciata nella versione 2.1.1, ma questa volta è stata selezionata correttamente nella 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 è stato 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
Il paging 2.1.0-alpha01 presenta due importanti novità: l'eliminazione delle pagine e le librerie di estensioni KTX per ogni artefatto, oltre a diverse altre modifiche alle API e correzioni di bug.
Modifiche alle 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 - Aggiunta
AsyncPagedListDiffer.addPagedListListener()per l'ascolto quando PagedList viene scambiato. b/111698609 - È stata aggiunta la variante
PagedListAdapter.onCurrentListChanged()che supera l'elenco precedente e quello nuovo. La variante precedente è stata ritirata. - Sono state aggiunte
PagedListAdapter/AsyncPagedListDiffer.submitList()varianti che accettano un callback aggiuntivo che viene attivato se/quando viene visualizzata la lista paginata, dopo il confronto. In questo modo puoi sincronizzare uno scambio di PagedList con altri aggiornamenti dell'interfaccia utente. b/73781068 PagedList.getLoadedCount()aggiunto per indicare il numero di elementi 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 competizione durante il confronto se gli elenchi vengono riutilizzati b/111591017
PagedList.loadAround()ora generaIndexOutOfBoundsExceptionquando l'indice non è valido. In precedenza, poteva arrestarsi in modo 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 paginazione 2.0.0 viene rilasciata con una singola correzione di bug.
Correzioni di bug
- È stato corretto un arresto anomalo che poteva verificarsi con lo scorrimento molto veloce utilizzando
PositionalDataSourcee i segnaposto b/114635383.
Versione 2.0.0-beta01
2 luglio 2018
Correzioni di bug
- Contenuti fissi che scompaiono in alcuni casi di anteposizione (segnaposto disattivati, PositionalDataSource) b/80149146
- (Già rilasciato in
1.0.1) Sono stati corretti i blocchi in cuiPagedListAdaptereAsyncPagedListDiffernon riuscivano a segnalare gli eventi di spostamento. b/110711937
Dipendenze precedenti ad AndroidX
Per le versioni precedenti 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 paginazione 1.0.1 viene rilasciata con una singola correzione di bug in runtime. Per una maggiore stabilità, ti consigliamo vivamente di utilizzare 1.0.1. È stata rilasciata anche la paginazione RxJava2 1.0.1, identica a 1.0.0-rc1.
Correzioni di bug
- Sono stati corretti gli arresti anomali in cui
PagedListAdaptereAsyncPagedListDiffernon riuscivano a segnalare gli eventi di spostamento. b/110711937
RxJava2 versione 1.0.0
RxJava2 versione 1.0.0-rc1
16 maggio 2018
Paging RxJava2 1.0.0-rc1 sta passando al candidato per la release 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 abbiamo altri problemi noti o nuove funzionalità pianificate per la release
della paginazione 1.0.0. Esegui l'upgrade dei tuoi progetti per utilizzare 1.0.0-rc1 e
aiutaci a testarlo in modo da poter rilasciare una versione di 1.0.0 solida e affidabile.
Non sono state apportate modifiche a questa release, che è identica a 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 release candidate.
Non prevediamo ulteriori modifiche all'API per Paging 1.0 e la soglia per eventuali modifiche all'API è molto elevata.
Il supporto di RxJava2 alpha per Paging viene rilasciato come modulo opzionale separato (android.arch.paging:rxjava2:1.0.0-alpha1)
e verrà temporaneamente versionato separatamente finché non si stabilizza.
Questa nuova libreria fornisce un'alternativa RxJava2 a LivePagedListBuilder, in grado di creare
Observable e Flowable, prendendo 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à
RxPagedListBuilderviene aggiunto tramite il nuovo artefattoandroid.arch.paging:rxjava2.
Modifiche alle API
Modifiche all'API per chiarire il ruolo degli esecutori nei builder:
setBackgroundThreadExecutor()rinominato insetFetchExecutor()(inPagedList.BuildereLivePagedListBuilder)setMainThreadExecutor()rinominato insetNotifyExecutor()(inPagedList.Builder).
È stato corretto il problema per cui il membro
PagedList.mCallbacksera privato.
Correzioni di bug
LivePagedListBuilderattiva il caricamento iniziale diPagedListsull'executor specificato, anziché sul pool di thread I/O dei componenti dell'architettura.È stato corretto il comportamento di invalidazione nei wrapper
DataSourceinterni (utilizzati per implementareDataSource.map, nonché il caricamento diPositionalDataSourcecon segnaposto disabilitato). 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 dallo spostamento della classe Function menzionata in precedenza, devi aggiornare la dipendenza lifecycle:runtime a android.arch.lifecycle:runtime:1.1.1.
La paginazione alpha7 è prevista come release finale prima che la paginazione raggiunga la fase beta.
Modifiche alle API
- Gli oggetti
DataSource.LoadParamsora hanno un costruttore pubblico e gli oggettiDataSource.LoadCallbacksono ora astratti. In questo modo è possibile eseguire il wrapping di unDataSourceo testare direttamente unDataSourcecon un callback simulato. b/72600421 - Mappatori per DataSource e DataSource.Factory
map(Function<IN,OUT>)ti consente di trasformare, racchiudere o decorare i risultati caricati da unDataSource.mapByPage(<List<IN>,List<OUT>>)consente di fare lo stesso per l'elaborazione batch (ad esempio, se gli elementi caricati da SQL devono eseguire query aggiuntive su un database separato, questa operazione può essere eseguita come batch).
PagedList#getDataSource()viene aggiunto come metodo di convenienza b/72611341- Tutte le classi ritirate sono state rimosse dall'API, inclusi i resti del pacchetto
recyclerview.extensionse diLivePagedListProvider. DataSource.Factoryviene modificata da un'interfaccia a una classe astratta per abilitare la funzionalità della mappa.
Correzioni di bug
- Changed Builders to be final. b/70848565
- L'implementazione di Room
DataSourceè 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.onItemAtEndLoadednon veniva richiamato perPositionalDataSourcese i segnaposto sono abilitati e la dimensione totale è un multiplo esatto della dimensione della pagina.
Versione 1.0.0-alpha5
22 gennaio 2018
Correzioni di bug
- Correggi il caricamento della pagina quando i segnaposto sono disattivati b/70573345
- Logging aggiuntivo per il rilevamento del bug IllegalArgumentException b/70360195 (e correzione speculativa lato Room)
- Correzioni del codice di esempio Javadoc b/70411933, b/71467637