पृष्ठांकन
इस टेबल में, androidx.paging
ग्रुप के सभी आर्टफ़ैक्ट की सूची दी गई है.
सह-प्रॉडक्ट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा वर्शन |
---|---|---|---|---|
paging-* | 3.3.6 | - | - | 3.4.0-alpha02 |
paging-compose | 3.3.6 | - | - | 3.4.0-alpha02 |
डिपेंडेंसी का एलान करना
Paging पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
Groovy
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-alpha02" }
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-alpha02") }
Kotlin एक्सटेंशन इस्तेमाल करने के बारे में जानकारी पाने के लिए, ktx दस्तावेज़ देखें.
डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. कृपया नई लाइब्रेरी बनाने से पहले, इस लाइब्रेरी में मौजूद मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
वर्शन 3.4
वर्शन 3.4.0-alpha02
30 जुलाई, 2025
androidx.paging:paging-*:3.4.0-alpha02
रिलीज़ हो गया है. वर्शन 3.4.0-alpha02 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PagingData.from
अबplaceholdersBefore
औरplaceholdersAfter
सेट करने की अनुमति देता है. ध्यान दें कि इन प्लेसहोल्डर को स्क्रोल करने से, लोड ट्रिगर नहीं होते. (I06983)
वर्शन 3.4.0-alpha01
2 जुलाई, 2025
androidx.paging:paging-*:3.4.0-alpha01
रिलीज़ हो गया है. वर्शन 3.4.0-alpha01 में ये कमिट शामिल हैं.
नई सुविधाएं
- Paging ने ये KMP टारगेट जोड़े हैं: watchos, tvos, mingwX64, watchosDeviceArm64, और linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
गड़बड़ियां ठीक की गईं
- Paging 3.3 या उसके बाद के वर्शन का इस्तेमाल करने वाली Android यूनिट टेस्ट में अब
PagingLogger
से गड़बड़ी नहीं दिखेगी (Ia9400, b/331684448) - उस गड़बड़ी को ठीक किया गया है जिसमें उपयोगकर्ता के स्क्रोल करने पर,
RecyclerView
अपडेट करते समयIndexOutOfBoundsException
दिखता था (Id1f16, b/381024738)RecyclerView
- उस गड़बड़ी को ठीक किया गया है जिसमें स्क्रोल करते समय रीफ़्रेश करने पर, पेजिंग की सुविधा ज़्यादा लोड को ट्रिगर नहीं कर पाती थी. (I60ca5, b/352586078)
- पेजिंग आइटम रीफ़्रेश करते समय स्क्रोल करने पर ऐप्लिकेशन क्रैश होने की समस्या को ठीक किया गया है. (I8c65a, b/347649763)
वर्शन 3.3
वर्शन 3.3.6
12 फ़रवरी, 2025
androidx.paging:paging-*:3.3.6
रिलीज़ हो गया है. वर्शन 3.3.6 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- शुरुआती रीफ़्रेश के दौरान भेजे गए रीफ़्रेश और फिर से कोशिश करने के सिग्नल अब सेव किए जाएंगे. साथ ही, पेजिंग प्रेजेंटर तैयार होने के बाद, इन्हें अपने-आप फिर से भेजा जाएगा.
बाहरी योगदान
वर्शन 3.3.5
11 दिसंबर, 2024
androidx.paging:paging-*:3.3.5
रिलीज़ हो गया है. वर्शन 3.3.5 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस गड़बड़ी को ठीक किया गया है जिसमें उपयोगकर्ता के
RecyclerView
को अपडेट करते समय स्क्रोल करने पर,RecyclerView
IndexOutOfBoundsException
दिखाता है. (Id1f16, b/381024738)
वर्शन 3.3.4
13 नवंबर, 2024
androidx.paging:paging-*:3.3.4
रिलीज़ हो गया है. वर्शन 3.3.4 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- Android की यूनिट टेस्ट में, Paging 3.3 या उसके बाद के वर्शन का इस्तेमाल करने पर, अब
Method isLoggable in android.util.Log not mocked
जैसी गड़बड़ी नहीं दिखेगी. (Ia9400, b/331684448)
वर्शन 3.3.2
7 अगस्त, 2024
androidx.paging:paging-*:3.3.2
रिलीज़ हो गया है. वर्शन 3.3.2 में ये कमिट शामिल हैं.
नई सुविधाएं
paging-common
औरpaging-testing
ने नए Kotlin-Multiplatform टारगेट जोड़े हैं:watchos
,tvos
, औरlinuxArm64
(90c9768), (53e0eca)
वर्शन 3.3.1
24 जुलाई, 2024
androidx.paging:paging-*:3.3.1
रिलीज़ हो गया है. वर्शन 3.3.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- स्क्रोल करते समय बैकग्राउंड में मौजूद डेटा सोर्स रीफ़्रेश होने पर,
AsyncPagingDataDiffer
या इसके ऊपर बनाए गए एपीआई (जैसे,RecyclerView
के साथ इस्तेमाल किया जाने वालाPagingDataAdapter
) ज़्यादा लोड ट्रिगर नहीं कर पाते थे. इस समस्या को ठीक कर दिया गया है. (I60ca5, b/352586078) - स्क्रोल करते समय, बैकग्राउंड में मौजूद डेटा सोर्स से आइटम हटाए जाने पर होने वाली क्रैश की समस्या को ठीक किया गया है. ऐसा तब होता है, जब
PagingDataAdapter
याAsyncPagingDataDiffer
का इस्तेमाल करकेRecyclerView
को स्क्रोल किया जाता है. (I8c65a, b/347649763)
वर्शन 3.3.0
14 मई, 2024
androidx.paging:paging-*:3.3.0
रिलीज़ हो गया है. वर्शन 3.3.0 में ये कमिट शामिल हैं.
3.2.0 के बाद हुए ज़रूरी बदलाव
PagingDataPresenter
अब एक सार्वजनिक क्लास है. अब मल्टीप्लैटफ़ॉर्म प्रज़ेंटर,PagingDataPresenter
के ऊपर बनाए जा सकते हैं. इसके लिए, इंटरनल पेजिंग एपीआई याpaging-runtime
केAsyncPagingDataDiffer
की ज़रूरत नहीं होती.hasError
औरisIdle
में,LoadStates
औरCombinedLoadStates
के लिए नए हेल्पर तरीके जोड़े गए हैं. इनसे यह पता चलेगा किLoadStates
, गड़बड़ी वाली स्थिति में है याNotLoading
स्थिति में है. साथ ही,Flow<CombinedLoadStates>
पर एक नयाawaitNotLoading()
Kotlin एक्सटेंशन मेथड जोड़ा गया है. यह तब तक इंतज़ार करता है, जब तक कि लोडNotLoading
या Error स्थिति में न आ जाए.PagingData.empty()
अब डिफ़ॉल्ट रूप सेNotLoading
की स्थितियां भेजता है. हालांकि, अगर कस्टमLoadStates
को इसके कंस्ट्रक्टर में पास किया जाता है, तो ऐसा नहीं होगा. यह मौजूदा व्यवहार से अलग है. इसमेंPagingDataAdapter
को सबमिट करने परLoadStates
को डिसपैच नहीं किया जाता है याLazyPagingItems
के तौर पर इकट्ठा किए जाने पर, लोडिंग की स्थितियां डिसपैच की जाती हैं.LazyPagingItems
के तौर पर इकट्ठा किए जाने पर, अब यह शुरुआती कंपोज़िशन के दौरान तुरंत एक खाली सूची भी दिखाएगा.
Kotlin Multiplatform के साथ काम करने की सुविधा
Paging अब Kotlin Multiplatform के साथ काम करने वाले आर्टफ़ैक्ट उपलब्ध कराता है. ऐसा काफ़ी हद तक, CashApp के multiplatform-paging प्रोजेक्ट की वजह से हुआ है.
paging-common
ने सभी Paging 3 API कोcommon
पर माइग्रेट कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.paging-testing
ने अपना कोडcommon
पर ट्रांसफ़र कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.paging-compose
ने अपना कोडcommon
पर ट्रांसफ़र कर दिया है. साथ ही, यहandroidx.compose
की तरह ही, Android आर्टफ़ैक्ट को कई प्लैटफ़ॉर्म पर उपलब्ध कराता है.paging-runtime
,paging-guava
,paging-rxjava2
, औरpaging-rxjava3
सिर्फ़ Android पर उपलब्ध रहेंगे.
वर्शन 3.3.0-rc01
1 मई, 2024
androidx.paging:paging-*:3.3.0-rc01
को Paging 3.3.0-beta01 में बिना किसी बदलाव के रिलीज़ किया गया है. वर्शन 3.3.0-rc01 में ये कमिट शामिल हैं.
वर्शन 3.3.0-beta01
3 अप्रैल, 2024
androidx.paging:paging-*:3.3.0-beta01
को बिना किसी खास बदलाव के रिलीज़ किया गया है. वर्शन 3.3.0-beta01 में ये कमिट शामिल हैं.
वर्शन 3.3.0-alpha05
20 मार्च, 2024
androidx.paging:paging-*:3.3.0-alpha05
रिलीज़ हो गया है. वर्शन 3.3.0-alpha05 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- पेजिंग अब सामान्य कोड के लिए, AndroidX Annotation
@MainThread
एनोटेशन का इस्तेमाल करता है. (I78f0d, b/327682438)
वर्शन 3.3.0-alpha04
6 मार्च, 2024
androidx.paging:paging-*:3.3.0-alpha04
रिलीज़ हो गया है. वर्शन 3.3.0-alpha04 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- Kotlin मल्टीप्लेटफ़ॉर्म के साथ काम करने की सुविधा जोड़ने से जुड़ी दस्तावेज़ की मामूली गड़बड़ियों को ठीक किया गया है. (aosp/2950785)
वर्शन 3.3.0-alpha03
7 फ़रवरी, 2024
androidx.paging:paging-*:3.3.0-alpha03
रिलीज़ हो गया है. वर्शन 3.3.0-alpha03 में ये कमिट शामिल हैं.
नई सुविधाएं
PagingDataPresenter
अब एक सार्वजनिक क्लास है. अब मल्टीप्लैटफ़ॉर्म प्रज़ेंटर,PagingDataPresenter
के ऊपर बनाए जा सकते हैं. इसके लिए, इंटरनल पेजिंग एपीआई याpaging-runtime
केAsyncPagingDataDiffer
की ज़रूरत नहीं होती. (Id1f74, b/315214786)LoadStates
औरCombinedLoadStates
हेल्पर के नए तरीके जोड़े गए हैं. इनसे यह पता लगाया जा सकता है किLoadStates
, Error याNotLoading
स्थिति में है या नहीं. इसके अलावा, एक नया एपीआई भी जोड़ा गया है. यहLoadStateFlow
पर तब तक इंतज़ार करता है, जब तक लोडNotLoading
या गड़बड़ी की स्थिति में नहीं आ जाता. (Id6c67)
व्यवहार में बदलाव
PagingData.empty()
अब डिफ़ॉल्ट रूप सेNotLoading
की स्थितियां भेजता है. हालांकि, अगर कस्टमLoadStates
को इसके कंस्ट्रक्टर में पास किया जाता है, तो ऐसा नहीं होगा. यह मौजूदा व्यवहार से अलग है. इसमेंPagingDataAdapter
को सबमिट करने परLoadStates
को डिसपैच नहीं किया जाता है याLazyPagingItems
के तौर पर इकट्ठा किए जाने पर, लोडिंग की स्थितियां डिसपैच की जाती हैं.LazyPagingItems
के तौर पर इकट्ठा किए जाने पर, अब यह शुरुआती कंपोज़िशन के दौरान तुरंत एक खाली सूची भी दिखाएगा. (I4d11d, b/301833847)
वर्शन 3.3.0-alpha02
20 सितंबर, 2023
androidx.paging:paging-*:3.3.0-alpha02
रिलीज़ हो गया है. वर्शन 3.3.0-alpha02 में ये कमिट शामिल हैं.
Kotlin Multiplatform के साथ काम करने की सुविधा
Paging अब Kotlin Multiplatform के साथ काम करने वाले आर्टफ़ैक्ट उपलब्ध कराता है. ऐसा काफ़ी हद तक, CashApp के multiplatform-paging प्रोजेक्ट की वजह से हुआ है. इससे हमें दो रिपॉज़िटरी के बीच अंतर को कम करने और उन्हें एक-दूसरे के साथ काम करने लायक बनाए रखने में मदद मिलेगी.
paging-common
ने सभी Paging 3 API कोcommon
पर माइग्रेट कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.paging-testing
ने अपना कोडcommon
पर ट्रांसफ़र कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.paging-compose
ने अपना कोडcommon
पर ट्रांसफ़र कर दिया है. साथ ही, यहandroidx.compose
की तरह ही, Android आर्टफ़ैक्ट को कई प्लैटफ़ॉर्म पर उपलब्ध कराता है.paging-runtime
,paging-guava
,paging-rxjava2
, औरpaging-rxjava3
सिर्फ़ Android पर उपलब्ध रहेंगे.
एपीआई में हुए बदलाव
- सार्वजनिक Logger इंटरफ़ेस को बंद कर दिया गया है. इसका इस्तेमाल सिर्फ़ इंटरनल तौर पर किया जाता था (I16e95, b/288623117)
बाहरी योगदान
- Cash App के veyndan का शुक्रिया. उन्होंने Paging को Kotlin Multiplatform पर माइग्रेट करने में मदद की (#560, #561, #562, #573, #576, #577, #578, #579, #580, #581, #583, #584, #586, #609)
वर्शन 3.3.0-alpha01
20 सितंबर, 2023
- androidx.paging लाइब्रेरी का यह पहला मल्टीप्लैटफ़ॉर्म रिलीज़ है. इस वर्शन में सिर्फ़
*-jvm
और*-android
आर्टफ़ैक्ट हैं. macOS, iOS, और Linux के वर्शन के लिए,3.3.0-alpha02
का इस्तेमाल करें.
वर्शन 3.2
वर्शन 3.2.1
6 सितंबर, 2023
androidx.paging:paging-*:3.2.1
रिलीज़ हो गया है. वर्शन 3.2.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें
asSnapshot()
का इस्तेमाल करके बनाए गए फ़्लो को पास करने पर, पेजिंग टेस्टिंग आर्टफ़ैक्ट काasSnapshot()
एपीआई हैंग हो जाता था. ऐसा इसलिए होता था, क्योंकिasSnapshot()
के पास यह जानकारी नहीं होती थी कि लोडिंग कब पूरी हुई (PagingData.from(List, LoadStates)
ओवरलोड के उलट).PagingData.from(List)
यह तरीका सिर्फ़ उन फ़्लो के लिए काम करता है जिन्हें पूरा किया जा सकता है. जैसे,flowOf(PagingData.from(...))
. जिन फ़्लो को पूरा नहीं किया जा सकता उनके लिए यह तरीका काम नहीं करता. जैसे,MutableStateFlow
,PagingData.from
ओवरलोड का इस्तेमाल करें, जोLoadStates
उपलब्ध कराता है). (I502c3) - Paging Compose अब अंदरूनी तौर पर
AndroidUiDispatcher.Main
का इस्तेमाल करता है. इससे यह पक्का किया जाता है कि नया डेटा उसी फ़्रेम में उपलब्ध हो जिसमें डेटा लोड हो रहा है. (Ia55af)
वर्शन 3.2.0
26 जुलाई, 2023
androidx.paging:paging-*:3.2.0
रिलीज़ हो गया है. वर्शन 3.2.0 में ये कमिट शामिल हैं.
3.1.0 के बाद हुए अहम बदलाव
- Paging Compose, एपीआई के तौर पर इस्तेमाल करने के लिए स्थिर हो गया है. इसे वापस Paging में मर्ज कर दिया गया है. अब इसका वर्शन, Paging के अन्य सभी आर्टफ़ैक्ट से मेल खाता है. 3.1.0 के बाद किए गए बदलावों में ये शामिल हैं:
PagingData.from(fakeData)
बनाकर और उसPagingData.from(fakeData)
कोMutableStateFlow
(जैसे,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) में रैप करके, नकली डेटा की सूची की झलक देखने की सुविधा. इस फ़्लो को@Preview
कंपोज़ेबल मेंcollectAsLazyPagingItems()
के लिए रिसीवर के तौर पर पास करें, ताकि झलक देखी जा सके.PagingData
LazyVerticalGrid
औरHorizontalPager
जैसे सभी लेज़ी लेआउट के साथ-साथ, Wear और TV लाइब्रेरी के कस्टम लेज़ी कॉम्पोनेंट के लिए सहायता. यह नए लोअर लेवलLazyPagingItems
एक्सटेंशन के तरीकोंitemKey
औरitemContentType
की मदद से किया गया है. इससे आपकोkey
औरcontentType
पैरामीटर को स्टैंडर्डitems
एपीआई पर लागू करने में मदद मिलती है. ये एपीआई,LazyColumn
औरLazyVerticalGrid
के साथ-साथHorizontalPager
जैसे एपीआई में इनके बराबर के पैरामीटर के लिए पहले से मौजूद हैं.items(lazyPagingItems)
औरitemsIndexed(lazyPagingItems)
अब काम नहीं करते. ये सिर्फ़LazyListScope
के साथ काम करते थे.
- नया
paging-testing
आर्टफ़ैक्ट, जो आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग और Paging के साथ उसके इंटिग्रेशन के लिए डिज़ाइन किए गए एपीआई उपलब्ध कराता है. उदाहरण के लिए, इसमें ये शामिल हैंTestPager
क्लास है. इसकी मदद से, Pager और असली यूज़र इंटरफ़ेस (यूआई) से अलग, अपने कस्टमPagingSource
को लागू करने के तरीके की पुष्टि की जा सकती है.-
asPagingSourceFactory
एपीआई, जो किसीFlow<List<Value>>
या स्टैटिकList<Value>
कोPagingSourceFactory
में बदल सकते हैं. इसPagingSourceFactory
को टेस्ट में Pager को पास किया जा सकता है asSnapshot
,Flow<PagingData<Value>>
पर Kotlin एक्सटेंशन है. यहFlow<PagingData<Value>>
को सीधेList<Value>
में बदलता है.asSnapshot lambda
की मदद से,scrollTo
याappendScrollWhile
जैसे एपीआई के ज़रिए अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की नकल की जा सकती है. इससे, पेज वाले डेटा के सेट में किसी भी समय यह पुष्टि की जा सकती है कि डेटा का स्नैपशॉट सही है.
- डिफ़ॉल्ट लॉग जोड़े गए हैं, ताकि पेजिंग की डीबग करने से जुड़ी जानकारी को दो लेवल पर दिखाया जा सके:
VERBOSE
औरDEBUG
.adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
कमांड का इस्तेमाल करके, लॉग चालू किए जा सकते हैं. यह व्यू के साथ पेजिंग या कंपोज़ के साथ पेजिंग, दोनों पर लागू होता है. PagingDataAdapter
औरAsyncPagingDataDiffer
के लिए कंस्ट्रक्टर जोड़े गए हैं. येCoroutineDispatcher
के बजायCoroutineContext
स्वीकार करते हैं.- एक नया
PagingSourceFactory
फ़ंक्शनल इंटरफ़ेस जोड़ा गया है. यह पिछले () ->PagingSource
लैम्ब्डा की तुलना में, ज़्यादा साफ़ तौर पर एपीआई के बारे में जानकारी देता है. इस फ़ैक्ट्री का इस्तेमाल, Pager को इंस्टैंशिएट करने के लिए किया जा सकता है.
वर्शन 3.2.0-rc01
21 जून, 2023
androidx.paging:paging-*:3.2.0-rc01
रिलीज़ हो गया है. वर्शन 3.2.0-rc01 में ये कमिट शामिल हैं.
बाहरी योगदान
- Veyndan का धन्यवाद. उन्होंने Paging को Android/JVM की खास बातों से अलग करने में योगदान दिया. (#553, #554, #555, #559)
वर्शन 3.2.0-beta01
7 जून, 2023
androidx.paging:paging-*:3.2.0-beta01
रिलीज़ हो गया है. वर्शन 3.2.0-beta01 में ये कमिट शामिल हैं.
Paging Compose
- Paging Compose, आधिकारिक तौर पर एपीआई के स्टेबल वर्शन में उपलब्ध है. इसलिए, इस वर्शन को
1.0.0-alpha20
से अपडेट कर दिया गया है, ताकि यह सभी अन्य पेजिंग आर्टफ़ैक्ट के वर्शन से मेल खाए.
एपीआई में हुए बदलाव
- Paging Compose से, बंद किए गए
items(LazyPagingItems)
औरitemsIndexed(LazyPagingItems)
एपीआई हटा दिए गए हैं. बदले गए एपीआई का उदाहरण देखने के लिए, Paging Compose1.0.0-alpha20
के रिलीज़ नोट देखें. (I9626e)
वर्शन 3.2.0-alpha06
24 मई, 2023
androidx.paging:paging-*:3.2.0-alpha06
रिलीज़ हो गया है. वर्शन 3.2.0-alpha06 में ये कमिट शामिल हैं.
नई सुविधाएं
- एक नया
PagingSourceFactory
फ़ंक्शनल इंटरफ़ेस जोड़ा गया है. यह मौजूदा() -> PagingSource
लैम्डा की तुलना में, एपीआई के बारे में ज़्यादा जानकारी देता है. इस फ़ैक्ट्री का इस्तेमाल,Pager
को इंस्टैंशिएट करने के लिए किया जा सकता है. (I33165, b/280655188) paging-testing
का नयाList<Value>.asPagingSourceFactory()
जोड़ा गया है, ताकिPagingSourceFactory
मिल सके. यह सिर्फ़ डेटा की ऐसी सूची से लोड होता है जिसे बदला नहीं जा सकता.Flow<List<Value>>
पर मौजूद मौजूदा एक्सटेंशन का इस्तेमाल, अब भी स्टैटिक डेटा की कई जनरेशन के साथ टेस्टिंग के लिए किया जाना चाहिए. (Id34d1, b/280655188)
एपीआई में हुए बदलाव
- पेजिंग-टेस्टिंग में मौजूद सभी सार्वजनिक एपीआई को अब
@VisibleForTesting
के साथ एनोटेट किया गया है, ताकि यह पक्का किया जा सके कि इन एपीआई का इस्तेमाल सिर्फ़ टेस्ट में किया जाए. (I7db6e) asSnapshot
एपीआई को अबCoroutineScope
पास करने की ज़रूरत नहीं है. अब यह डिफ़ॉल्ट रूप से, पैरंट स्कोप से मिले कॉन्टेक्स्ट का इस्तेमाल करता है. (Id0a78, b/282240990)TestPager
कंस्ट्रक्टर पैरामीटर को फिर से क्रम में लगाया गया है, ताकि वेPager
कंस्ट्रक्टर पैरामीटर (I6185a) के क्रम से मेल खाएं- पेजिंग-टेस्टिंग के लिए, lambda टाइप
() -> PagingSource<Key, Value>
के इस्तेमाल को टाइपPagingSourceFactory<Key, Value>
में माइग्रेट किया गया. (I4a950, b/280655188)
व्यवहार में बदलाव
asSnapshot
पेजिंग टेस्ट चलाने के लिए, अब मुख्य डिस्पैचर की ज़रूरत नहीं है. इसे सेट करने से, अब टेस्ट के व्यवहार में कोई बदलाव नहीं होता. (Ie56ea)
वर्शन 3.2.0-alpha05
3 मई, 2023
androidx.paging:paging-*:3.2.0-alpha05
रिलीज़ हो गया है. वर्शन 3.2.0-alpha05 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
asSnapshot
के Paging Testing API ने अब अपनेloadOperations
पैरामीटर को डिफ़ॉल्ट रूप से खाली लैम्ब्डा पर सेट कर दिया है. इससे, शुरुआती रीफ़्रेश लोड से डेटा वापस पाने के लिए, लोड ऑपरेशन पास किए बिनाasSnapshot
को कॉल किया जा सकता है. (Ied354, b/277233770)
दस्तावेज़ में किए गए सुधार
asPagingSourceFactory()
के बारे में दस्तावेज़ को अपडेट किया गया है. इसमें यह साफ़ तौर पर बताया गया है कि यहFlow
पर एक एक्सटेंशन मेथड है. यहPagingSource
इंस्टेंस जनरेट करने के लिए, फिर से इस्तेमाल किया जा सकने वाला फ़ैक्ट्री ऑब्जेक्ट दिखाता है. (I5ff4f, I705b5)LoadResult.Page
कंस्ट्रक्टर के दस्तावेज़ को अपडेट किया गया है. इससे यह साफ़ तौर पर बताया गया है कि जंप करने की सुविधा के लिए,itemsBefore
औरitemsAfter
को ओवरराइड करना ज़रूरी है. (Ied354)
बाहरी योगदान
- Veyndan का धन्यवाद. उन्होंने Paging को Android/JVM की खास बातों से अलग करने में योगदान दिया. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
वर्शन 3.2.0-alpha04
8 फ़रवरी, 2023
androidx.paging:paging-*:3.2.0-alpha04
रिलीज़ हो गया है. वर्शन 3.2.0-alpha04 में ये कमिट शामिल हैं.
पेजिंग की जांच करना
paging-testing
आर्टफ़ैक्ट में अबasPagingSourceFactory
तरीका शामिल है. इससेFlow<List<Value>>
सेpagingSourceFactory
बनाया जा सकता है, ताकि इसे Pager को दिया जा सके. फ़्लो से निकलने वाला हरList<Value>>
, पेज किए गए डेटा के जनरेशन को दिखाता है. इससे पेजिंग की जांच करना आसान हो जाता है. उदाहरण के लिए,PagingData
ट्रांसफ़ॉर्मेशन के लिए, Pager के लिए फ़र्ज़ी डेटा सोर्स बनाकर डेटा इकट्ठा किया जा सकता है. (I6f230, b/235528239)paging-testing
आर्टफ़ैक्ट को नए एपीआई के साथ अपडेट किया गया है. ये एपीआई,Flow<PagingData<T>>
में मौजूद डेटा की पुष्टि करने के लिए सही हैं. इसका इस्तेमाल, उदाहरण के लिए, ViewModel लेयर सेFlow<PagingData<T>>
के आउटपुट की पुष्टि करने के लिए किया जा सकता है.ऐसा
Flow<PagingData<Value>>
पर मौजूदasSnapshot
Kotlin एक्सटेंशन की मदद से किया जाता है. यहFlow<PagingData<Value>>
को सीधेList<Value>
में बदल देता है.asSnapshot
लैंबडा की मदद से,scrollTo
याappendScrollWhile
जैसे एपीआई के ज़रिए, अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को इस तरह से कॉपी किया जा सकता है कि उसे दोहराया जा सके और वह एक जैसा हो. इससे, पेज वाले डेटा के सेट में किसी भी समय, डेटा के स्नैपशॉट की पुष्टि की जा सकती है.// 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
,suspend
का एक तरीका है. इसेrunTest
के अंदर चलाया जाना चाहिए. ज़्यादा जानकारी के लिए, Android पर Kotlin कोरूटीन की टेस्टिंग करना लेख पढ़ें. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)
एपीआई में हुए बदलाव
AsyncPagingDataDiffer
औरPagingDataAdapter
मेंgetItem
औरpeek
को किए जाने वाले यूज़र इंटरफ़ेस (यूआई) कॉल को अब सही तरीके से सिर्फ़ मुख्य थ्रेड पर कॉल किया जा सकता है. (I699b6)TestPager
के ज़रिए इस्तेमाल किए गए जेनरिक टाइप से वाइल्डकार्ड हटा दिए गए हैं. इससे Java प्रोग्रामिंग लैंग्वेज में लिखे गए कोड में, उन तरीकों के नतीजों का इस्तेमाल करना आसान हो गया है. (I56c42)
वर्शन 3.2.0-alpha03
24 अक्टूबर, 2022
androidx.paging:paging-*:3.2.0-alpha03
रिलीज़ हो गया है. वर्शन 3.2.0-alpha03 में ये कमिट शामिल हैं.
पेजिंग की जांच करना
इस रिलीज़ में एक नया आर्टफ़ैक्ट शामिल है: paging-testing
. इस आर्टफ़ैक्ट में ऐसे एपीआई दिए गए हैं जो आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग के लिए डिज़ाइन किए गए हैं. साथ ही, इसमें Paging के साथ इंटिग्रेशन की सुविधा भी दी गई है.
उदाहरण के लिए, इस पहले वर्शन में एक TestPager
क्लास शामिल है. इसकी मदद से, Pager
और असली यूज़र इंटरफ़ेस (यूआई) से अलग, अपने कस्टम PagingSource
को लागू करने के तरीके की पुष्टि की जा सकती है. आम तौर पर, आपको एंड-टू-एंड पेजिंग इंटिग्रेशन को सिम्युलेट करने के लिए इसकी ज़रूरत होती है.
TestPager
को फ़र्ज़ी माना जाना चाहिए. यह एक टेस्ट डबल है, जो Pager
के असली वर्शन की तरह काम करता है. साथ ही, PagingSource
की जांच करने के लिए, आसान एपीआई उपलब्ध कराता है. ये suspend
एपीआई हैं और इन्हें runTest
में चलाना चाहिए. इसके बारे में Android पर Kotlin coroutines की जांच करने से जुड़ी गाइड में बताया गया है.
इन एपीआई के इस्तेमाल का उदाहरण, room-paging
टेस्ट में देखा जा सकता है. इन्हें TestPager
का इस्तेमाल करने के लिए फिर से बनाया गया था.
एपीआई में हुए बदलाव
- इस कुकी की मदद से,
LoadResult.Page.data
सेLoadResult.Page.iterator()
तक आसानी से दोहराया जा सकता है. इससे,List<LoadResult.Page>
दिए जाने पर, Kotlin की स्टैंडर्ड लाइब्रेरी केflatten
तरीके का इस्तेमाल किया जा सकता है. जैसे,PagingState
कीpages
प्रॉपर्टी के साथ, जिसेPagingSource.getRefreshKey
तरीके में पास किया जाता है. (Ie0718)
वर्शन 3.2.0-alpha02
10 अगस्त, 2022
androidx.paging:paging-*:3.2.0-alpha02
रिलीज़ हो गया है. वर्शन 3.2.0-alpha02 में ये कमिट शामिल हैं.
नई सुविधाएं
- पेजिंग अब
AsyncPagingDataDiffer
याPagingDataAdapter
क्लास के ज़रिए लॉग उपलब्ध कराता है, ताकिPagingData
से इकट्ठा की गई डीबग करने से जुड़ी जानकारी को दिखाया जा सके. - लॉगिंग की सुविधा को
adb shell
कमांडadb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159) का इस्तेमाल करके चालू किया जा सकता है
गड़बड़ियां ठीक की गईं
paging-common:3.2.0-alpha01
को रनटाइमpaging-runtime:3.1.1
या इससे पुराने वर्शन के साथ इस्तेमाल करते समय,PagingDataDiffer
कंस्ट्रक्टर के न होने की गड़बड़ी को ठीक किया गया है.(b/235256201)
वर्शन 3.2.0-alpha01
1 जून, 2022
androidx.paging:paging-*:3.2.0-alpha01
रिलीज़ हो गया है. वर्शन 3.2.0-alpha01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PagingDataAdapter
औरAsyncPagingDataDiffer
के लिए कंस्ट्रक्टर जोड़े गए हैं. येCoroutineDispatcher
के बजायCoroutineContext
स्वीकार करते हैं. (Idc878)- डिफ़ॉल्ट रूप से, प्रज़ेंटर के डिवाइस पर
PagingData.from()
औरPagingData.empty()
का असरCombinedLoadStates
पर नहीं पड़ेगा. इन कंस्ट्रक्टर मेंsourceLoadStates
औरremoteLoadStates
को पास करने की अनुमति देने वाला एक नया ओवरलोड जोड़ा गया है.इससे,LoadStates
को पूरी तरह से टर्मिनल के तौर पर सेट करने के मौजूदा व्यवहार को बनाए रखा जा सकेगा.NotLoading(endOfPaginationReached = false)
) को टारगेट किया जा सकता है. अगर ज़रूरत हो, तो रिमोट स्टेट को भी टारगेट किया जा सकता है. अगरLoadStates
पास नहीं किए जाते हैं, तो प्रज़ेंटर को स्टैटिकPagingData
मिलने पर, उसकी स्क्रीन पर पिछलेCombinedLoadStates
दिखते रहेंगे. (Ic3ce5, b/205344028)
गड़बड़ियां ठीक की गईं
- अब उन मामलों में
PagingSource.getRefreshKey()
के नतीजे कोinitialKey
के नतीजे से ज़्यादा प्राथमिकता दी जाती है जहां यह शून्य वैल्यू दिखाता है, लेकिनinitialKey
के लिए शून्य से अलग वैल्यू सेट की गई है. (Ic9542, b/230391606)
बाहरी योगदान
- test-coroutines-lib माइग्रेट करने की वजह से, :compose:ui:ui-test API (updateApi) अपडेट किया गया (I3366d)
वर्शन 3.1
वर्शन 3.1.1
9 मार्च, 2022
androidx.paging:paging-*:3.1.1
रिलीज़ हो गया है. वर्शन 3.1.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- जनरेशन के बीच में मौजूद ऐसे
LoadState.NotLoading
इवेंट हटाए गए जिन्हें.cachedIn()
ने गलत तरीके से डाला था. इस बदलाव से,LoadState
में बदलावों पर प्रतिक्रिया देना ज़्यादा आसान हो जाता है. ऐसा इसलिए, क्योंकि इसमें ऐसे गैर-ज़रूरीLoadState.NotLoading
इवेंट हटा दिए जाते हैं जो लोड नहीं हो पाए थे. ये इवेंट, लोड नहीं हो पाने की समस्या को ठीक करने के लिए फिर से कोशिश करने, रीफ़्रेश करने या अमान्य होने के दौरान जनरेट हुए थे.
वर्शन 3.1.0
17 नवंबर, 2021
androidx.paging:paging-*:3.1.0
रिलीज़ हो गया है. वर्शन 3.1.0 में ये कमिट शामिल हैं.
3.0.0 के बाद हुए अहम बदलाव
Flow<PagingData>.observable
औरFlow<PagingData>.flowable
एपीआई अब एक्सपेरिमेंट के तौर पर उपलब्ध नहीं हैंLoadState
के व्यवहार में बदलाव:endOfPaginationReached
की कीमत,LoadType.REFRESH
के लिए हमेशाfalse
रहेगी. यह कीमतPagingSource
औरRemoteMediator
, दोनों के लिए लागू होगी- पेजिंग से मिले
LoadStates
को अब डाउनस्ट्रीम में भेजने से पहले,PagingSource
औरRemoteMediator
, दोनों से मान्य वैल्यू मिलने का इंतज़ार करना होगा.PagingData
की नई जनरेशन अब हमेशा रीफ़्रेश स्टेट के लिएLoading
से शुरू होगी. कुछ मामलों में, यह गलत तरीके सेNotLoading
पर रीसेट नहीं होगी. - प्रज़ेंटर एपीआई पर
.loadStateFlow
और.addLoadStateListener
, अब शुरुआतीCombinedLoadStates
को बार-बार नहीं भेजते हैं. इसमें हमेशा मध्यस्थ की स्थितियांnull
पर सेट होती हैं
- पुरानी जनरेशन के प्रॉडक्ट के लिए, अब अमान्य होने या नई जनरेशन के प्रॉडक्ट के उपलब्ध होने पर, सदस्यता तुरंत रद्द हो जाती है. अब
Flow<PagingData>
पर.collectLatest
का इस्तेमाल करना ज़रूरी नहीं होगा. हालांकि, अब भी ऐसा करने का सुझाव दिया जाता है. PagingSource.LoadResult.Invalid
कोPagingSource.load
से नए रिटर्न टाइप के तौर पर जोड़ा गया है. इससे Paging, इसPagingSource
के लिए लोड करने के किसी भी लंबित या आने वाले अनुरोध को खारिज कर देता है और उसे अमान्य कर देता है. इस रिटर्न टाइप को ऐसे डेटा को मैनेज करने के लिए डिज़ाइन किया गया है जो अमान्य हो सकता है या पुराना हो सकता है. यह डेटा, डेटाबेस या नेटवर्क से वापस मिल सकता है..onPagesPresented
और.addOnPagesUpdatedListener
प्रज़ेंटर एपीआई जोड़े गए. ये एपीआई, यूज़र इंटरफ़ेस (यूआई) में पेज दिखाए जाने पर सिंक्रोनस तरीके से ट्रिगर होते हैं. पेज के अपडेट इन स्थितियों में हो सकते हैं:- PagingData की नई जनरेशन का शुरुआती लोड पूरा हो जाता है. भले ही, नई जनरेशन में दिखाए गए आइटम में कोई बदलाव हुआ हो या नहीं. जैसे, अगर नई जनरेशन में, शुरुआती लोड पूरा होने के बाद कोई अपडेट नहीं होता है, क्योंकि सूची बिलकुल एक जैसी है, तो भी यह कॉलबैक ट्रिगर होगा.
- पेज को तब भी डाला जाता है, जब डाले गए पेज में कोई नया आइटम मौजूद न हो.
- पेज को हटा दिया जाता है, भले ही वह खाली हो.
वर्शन 3.1.0-rc01
3 नवंबर, 2021
androidx.paging:paging-*:3.1.0-rc01
रिलीज़ हो गया है. वर्शन 3.1.0-rc01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- .cachedIn() में रेस कंडीशन + मेमोरी लीक की समस्या ठीक की गई है. यह समस्या तब होती थी, जब Paging डाउनस्ट्रीम से कई लोड इवेंट भेजे जाते थे. ऐसा तब होता था, जब कोई ऑब्ज़र्वर नहीं होता था या जब कोई ऑब्ज़र्वर नए PagingData पर स्विच कर रहा होता था. (Ib682e)
वर्शन 3.1.0-beta01
13 अक्टूबर, 2021
androidx.paging:paging-*:3.1.0-beta01
रिलीज़ हो गया है. वर्शन 3.1.0-beta01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- इस समस्या को ठीक किया गया है. इसमें कई आइटम को तेज़ी से ऐक्सेस करने पर, उन्हें प्रीफ़ेचडिस्टेंस में शामिल नहीं किया जाता था. इससे पेज लोड होने में समस्या आती थी. यह समस्या तब ज़्यादा होती है, जब कई आइटम एक साथ इस तरह से दिखाए जाते हैं कि उपयोगकर्ता के स्क्रोल करने की दिशा के हिसाब से आइटम लोड होने में ज़्यादा समय लगता है. इन आइटम ऐक्सेस को अब बफ़र किया जाता है और साथ ही प्राथमिकता दी जाती है, ताकि इन्हें हटाया न जा सके. (aosp/1833273)
वर्शन 3.1.0-alpha04
29 सितंबर, 2021
androidx.paging:paging-*:3.1.0-alpha04
रिलीज़ हो गया है. वर्शन 3.1.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
Flow<PagingData>.observable
औरFlow<PagingData>.flowable
एपीआई, अब एक्सपेरिमेंट के तौर पर उपलब्ध नहीं हैं. (Ie0bdd)
गड़बड़ियां ठीक की गईं
- LoadStates के लिए,
endOfPaginationReached
अब हमेशाfalse
होता है.LoadType.REFRESH
पहले, RemoteMediatorREFRESH
के लिए endOfPaginationReached कोtrue
के तौर पर सेट किया जा सकता था. हालांकि, PagingSource के लिए ऐसा नहीं किया जा सकता था. अब इस व्यवहार को हमेशाfalse
दिखाने के लिए कंसोलिडेट किया गया है, क्योंकि REFRESH के लिए टर्मिनल होना कभी भी सही नहीं होता. साथ ही, अब इसे LoadStates में एपीआई अनुबंध के हिस्से के तौर पर दस्तावेज़ में शामिल किया गया है. यह तय करते समय कि पेज नंबर डालने की सुविधा बंद कर दी गई है, आपको हमेशा APPEND या PREPEND के हिसाब से ऐसा करना चाहिए. (I047b6) पेजिंग की LoadStates अब PagingSource और RemoteMediator, दोनों से मान्य वैल्यू मिलने का इंतज़ार करती हैं. इसके बाद, जनरेशन के बीच डाउनस्ट्रीम में वैल्यू भेजती हैं. इससे PagingData की नई जनरेशन, CombinedLoadStates.source.refresh में NotLoading नहीं भेज पाएगी. ऐसा तब होगा, जब वह पहले से ही Loading पर हो. PagingData की नई जनरेशन, अब रीफ़्रेश की स्थिति के लिए हमेशा Loading से शुरू होगी. इसके बजाय, कुछ मामलों में पहले NotLoading पर गलत तरीके से रीसेट नहीं होगी.
पुरानी जनरेशन के लिए, अमान्य होने या नई जनरेशन के लिए रद्द करने की सुविधा अब तुरंत उपलब्ध है. अब
Flow<PagingData>
पर .collectLatest का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, अब भी ऐसा करने का सुझाव दिया जाता है. (I0b2b5, b/177351336, b/195028524)प्रज़ेंटर एपीआई पर
.loadStateFlow
और.addLoadStateListener
, अब शुरुआतीCombinedLoadStates
को बार-बार नहीं भेजते हैं. इसमें हमेशा मध्यस्थ की स्थितियांnull
पर और सोर्स की स्थितियांNotLoading(endOfPaginationReached = false)
पर सेट होती हैं. इसका मतलब है कि:- RemoteMediator का इस्तेमाल करने पर, मध्यस्थ की स्थितियां हमेशा भरी जाएंगी.
.loadStateFlow
पर नया loadState लिसनर या नया कलेक्टर रजिस्टर करने पर, अगर उसेPagingData
से कोई असलीCombinedLoadStates
नहीं मिला है, तो वह अब मौजूदा वैल्यू तुरंत नहीं भेजेगा. ऐसा तब हो सकता है, जब कोई कलेक्टर या लिसनर,PagingData
सबमिट किए जाने से पहले ही शुरू हो जाए. (I1a748)
वर्शन 3.1.0-alpha03
21 जुलाई, 2021
androidx.paging:paging-*:3.1.0-alpha03
रिलीज़ हो गया है. वर्शन 3.1.0-alpha03 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PagingSource में LoadResult.Invalid नाम का तीसरा LoadResult रिटर्न टाइप जोड़ा गया है. जब PagingSource.load, LoadResult.Invalid दिखाता है, तो पेजिंग की सुविधा लोड किए गए डेटा को खारिज कर देगी और PagingSource को अमान्य कर देगी. इस तरह के नतीजे को इस तरह से डिज़ाइन किया गया है कि यह ऐसे डेटा को हैंडल कर सके जो अमान्य हो सकता है या पुराना हो सकता है. यह डेटा, डेटाबेस या नेटवर्क से मिल सकता है.
उदाहरण के लिए, अगर डेटाबेस में डेटा लिखा जाता है, लेकिन PagingSource समय पर अमान्य नहीं होता है, तो यह ऐसे नतीजे दिखा सकता है जो एक-दूसरे से मेल नहीं खाते.ऐसा तब होता है, जब PagingSource का इस्तेमाल, उस डेटासेट के डेटा को लोड करने के लिए किया जाता है जिसमें बदलाव नहीं किया जा सकता. जैसे, LIMIT OFFSET स्टाइल वाले डीबी लागू किए जाते हैं). इस स्थिति में, लोड करने के बाद अमान्य होने की जांच करने और LoadResult.Invalid को वापस लाने का सुझाव दिया जाता है. इससे Paging, इस PagingSource के लिए लोड करने के किसी भी लंबित या आने वाले अनुरोध को खारिज कर देता है और इसे अमान्य कर देता है.
इस तरह के डेटा सोर्स को Paging2 API भी इस्तेमाल कर सकता है. इसके लिए, LivePagedList या RxPagedList का इस्तेमाल किया जाता है. Paging2 के PagedList API के साथ PagingSource का इस्तेमाल करने पर, PagedList तुरंत अलग हो जाता है. इससे इस PagedList पर डेटा लोड करने की कोशिशें रुक जाती हैं. साथ ही, PagingSource पर अमान्य होने की स्थिति ट्रिगर हो जाती है.
LoadResult एक सील की गई क्लास है. इसका मतलब है कि यह सोर्स के साथ काम न करने वाला बदलाव है. इसलिए, PagingSource.load के नतीजों का सीधे तौर पर इस्तेमाल करने वाले यूज़ केस को कंपाइल टाइम पर LoadResult.Invalid को हैंडल करना होगा. उदाहरण के लिए, Kotlin का इस्तेमाल करने वाले ऐसे लोग जो रिटर्न टाइप की जांच करने के लिए exhaustive-when का इस्तेमाल करते हैं उन्हें Invalid टाइप के लिए जांच जोड़नी होगी. (Id6bd3, b/191806126, b/192013267)
गड़बड़ियां ठीक की गईं
- PagingSource.registerInvalidatedCallback या DataSource.addInvalidatedCallback के ज़रिए जोड़े गए अमान्य होने के कॉलबैक, अब अपने-आप ट्रिगर हो जाते हैं. ऐसा तब होता है, जब उन्हें ऐसे PagingSource / DataSource पर रजिस्टर किया गया हो जो पहले से ही अमान्य है. इससे रेस कंडीशन की समस्या ठीक हो जाती है. इस वजह से, पेजिंग के अमान्य होने के सिग्नल कम हो जाते थे और शुरुआती लोड के दौरान पहले से ही अमान्य सोर्स दिए जाने पर, पेजिंग रुक जाती थी. इसके अलावा, अब ट्रिगर होने के बाद अमान्य करने वाले कॉलबैक को सही तरीके से हटा दिया जाता है, क्योंकि उन्हें ज़्यादा से ज़्यादा एक बार कॉल किया जाता है. (I27e69)
- नई PagedList स्ट्रीम से, प्लेसहोल्डर की शुरुआती वैल्यू (InitialPagedList) सबमिट करना. उदाहरण के लिए, LivePagedListBuilder या RxPagedListBuilder, पहले से लोड किए गए डेटा को अब मिटाएगा नहीं.
वर्शन 3.1.0-alpha02
1 जुलाई, 2021
androidx.paging:paging-*:3.1.0-alpha02
रिलीज़ हो गया है. वर्शन 3.1.0-alpha02 में ये कमिट शामिल हैं.
नई सुविधाएं
onPagesPresented लिसनर और फ़्लो प्रेजेंटर एपीआई जोड़े गए हैं. ये एपीआई, यूज़र इंटरफ़ेस (यूआई) में दिखाए गए पेजों के अपडेट होने के तुरंत बाद ट्रिगर होते हैं.
ये अपडेट, यूज़र इंटरफ़ेस (यूआई) के साथ सिंक होते हैं. इसलिए, अपडेट लागू होने के बाद स्थिति की जांच करने के लिए, .snapshot और .getItemCount जैसे अडैप्टर के तरीकों को कॉल किया जा सकता है. ध्यान दें कि .snapshot() को साफ़ तौर पर कॉल करने के लिए छोड़ दिया गया था, क्योंकि हर अपडेट पर ऐसा करना महंगा पड़ सकता है.
पेज अपडेट इन स्थितियों में हो सकते हैं:
- PagingData की नई जनरेशन का शुरुआती लोड पूरा हो जाता है. भले ही, नई जनरेशन में दिखाए गए आइटम में कोई बदलाव हुआ हो या नहीं. जैसे, अगर नई जनरेशन में शुरुआती लोड पूरा हो जाता है और सूची में कोई बदलाव नहीं होता है, तो भी यह कॉलबैक ट्रिगर होगा.
- पेज डाला जाता है, भले ही डाले गए पेज में कोई नया आइटम न हो
- पेज को हटा दिया जाता है, भले ही हटाया गया पेज खाली हो (I272c9, b/189999634)
गड़बड़ियां ठीक की गईं
- LivePagedList या RxPagedList से मिली शुरुआती वैल्यू से PagedList.dataSource को ऐक्सेस करने पर, अब IllegalStateException (I96707) नहीं दिखेगा
वर्शन 3.1.0-alpha01
2 जून, 2021
androidx.paging:paging-*:3.1.0-alpha01
रिलीज़ हो गया है. वर्शन 3.1.0-alpha01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
paging-rxjava3
की ओर से उपलब्ध कराई गई क्लास अबandroidx.paging.rxjava3
पैकेज के तहत लाइव हैं, ताकि वेpaging-rxjava2
(Ifa7f6) के साथ टकराव न करें
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें Paging, कभी-कभी RecyclerView को no-op differ इवेंट भेजता था. इससे कुछ लिसनर पहले ही ट्रिगर हो जाते थे. (Ic507f, b/182510751)
बाहरी योगदान
- rxjava3 आर्टफ़ैक्ट में, बंद किए गए PagedList compat API जोड़े गए (Id1ce2, b/182497591)
Paging Compose वर्शन 1.0.0
वर्शन 1.0.0-alpha20
24 मई, 2023
androidx.paging:paging-compose:1.0.0-alpha20
रिलीज़ हो गया है. वर्शन 1.0.0-alpha20 में ये कमिट शामिल हैं.
नई सुविधाएं
- Paging Compose अब फ़र्ज़ी डेटा की सूची की झलक देखने की सुविधा देता है.इसके लिए, एक
PagingData.from(fakeData)
बनाएं और उसPagingData.from(fakeData)
कोMutableStateFlow
में रैप करें. उदाहरण के लिए,PagingData
MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) का इस्तेमाल किया जाता है. इस डेटा को@Preview
में इनपुट के तौर पर इस्तेमाल करके,collectAsLazyPagingItems()
पर किए गए कॉल मेंLazyPagingItems
की झलक देखी जा सकती है. (I8a78d, b/194544557)
गड़बड़ियां ठीक की गईं
pager.flow.cachedIn
से कैश किया गया डेटा,LazyPagingItems
में इकट्ठा किया जाता है. अब यह डेटा, स्थिति को वापस लाने के बाद तुरंत उपलब्ध होगा. इसके लिए, एसिंक्रोनस कलेक्शन की ज़रूरत नहीं होगी. इसका मतलब है कि स्थिति वापस आने के बाद, कंपोज़िशन के तुरंत बाद कैश मेमोरी में सेव किया गया डेटा दिखाने के लिए तैयार हो जाएगा. (I97a60, b/177245496)
वर्शन 1.0.0-alpha19
3 मई, 2023
androidx.paging:paging-compose:1.0.0-alpha19
रिलीज़ हो गया है. वर्शन 1.0.0-alpha19 में ये कमिट शामिल हैं.
सभी लेज़ी लेआउट के साथ काम करता है
इससे पहले, Paging Compose, LazyListScope
पर कस्टम items
और itemsIndexed
एक्सटेंशन उपलब्ध कराता था. इसका मतलब है कि Paging Compose को LazyVerticalGrid
, HorizontalPager
या Wear और TV लाइब्रेरी से मिले अन्य कस्टम लेज़ी कॉम्पोनेंट जैसे अन्य लेज़ी लेआउट के साथ इस्तेमाल नहीं किया जा सकता था. इस रिलीज़ का मुख्य अपडेट, इस समस्या को ठीक करना है.
ज़्यादा लेज़ी लेआउट के साथ काम करने के लिए, हमें अलग लेयर पर एपीआई बनाने पड़े. हर लेज़ी लेआउट के लिए कस्टम items
एपीआई उपलब्ध कराने के बजाय, Paging Compose अब itemKey
और itemContentType
में LazyPagingItems
पर एक्सटेंशन के थोड़े कम लेवल के तरीके उपलब्ध कराता है. इन एपीआई का मकसद, key
और contentType
पैरामीटर को स्टैंडर्ड items
एपीआई में लागू करने में आपकी मदद करना है. ये एपीआई, LazyColumn
और LazyVerticalGrid
के साथ-साथ HorizontalPager
जैसे एपीआई में इनके बराबर के पैरामीटर के लिए पहले से मौजूद हैं. (Ifa13b, Ib04f0, b/259385813)
इसका मतलब है कि LazyVerticalGrid
को सपोर्ट करने के लिए, यह तरीका इस्तेमाल किया जाएगा:
// 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)
}
}
इन नए एपीआई के इस्तेमाल के ज़्यादा उदाहरणों के लिए, कृपया हमारे सैंपल देखें.
इन बदलावों की वजह से, LazyColumn
और LazyRow
के उदाहरण कुछ लाइनें लंबे हो गए हैं. हालांकि, हमें लगता है कि Paging Compose का इस्तेमाल करने वाले लोगों के लिए, सभी लेज़ी लेआउट में एक जैसा कोड होना ज़रूरी है. इस वजह से, LazyListScope
के मौजूदा एक्सटेंशन अब काम नहीं करेंगे. (I0c459, I92c8f, b/276989796)
एपीआई में हुए बदलाव
- नए एपीआई पर माइग्रेट करने की प्रोसेस को आसान बनाने के लिए,
LazyListScope
पर मौजूदitems
औरitemsIndexed
एक्सटेंशन फ़ंक्शन, अबcontentType
पैरामीटर के साथ काम करते हैं. यह नए एपीआई में उपलब्ध सुविधा के जैसा ही है. (Ib1918, b/255283378)
डिपेंडेंसी से जुड़े अपडेट
- Paging Compose ने अपनी डिपेंडेंसी को Compose 1.0.5 से Compose 1.2.1 पर अपडेट कर दिया है. (Ib1918, b/255283378)
वर्शन 1.0.0-alpha18
8 फ़रवरी, 2023
androidx.paging:paging-compose:1.0.0-alpha18
को बिना किसी बदलाव के रिलीज़ किया गया है. वर्शन 1.0.0-alpha18 में ये कमिट शामिल हैं.
वर्शन 1.0.0-alpha17
24 अक्टूबर, 2022
androidx.paging:paging-compose:1.0.0-alpha17
रिलीज़ हो गया है. वर्शन 1.0.0-alpha17 में ये कमिट शामिल हैं.
नई सुविधाएं
collectLazyPagingItems
को कॉल करते समय, कस्टमCoroutineContext
के काम करने की सुविधा जोड़ी गई है. (I7a574, b/243182795, b/233783862)
वर्शन 1.0.0-alpha16
10 अगस्त, 2022
androidx.paging:paging-compose:1.0.0-alpha16
रिलीज़ हो गया है. वर्शन 1.0.0-alpha16 में ये कमिट शामिल हैं.
नई सुविधाएं
- पेजिंग लाइब्रेरी अब
LazyPagingItems
क्लास के ज़रिए लॉग उपलब्ध कराती है, ताकि PagingData से इकट्ठा की गई डीबग करने से जुड़ी जानकारी को दिखाया जा सके. adb shell
कमांडadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
का इस्तेमाल करके, लॉग चालू किए जा सकते हैं. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
गड़बड़ियां ठीक की गईं
paging-common:3.1.1
या इससे पुराने वर्शन के साथpaging-compose:1.0.0-alpha15
का इस्तेमाल करते समय,PagingDataDiffer
कंस्ट्रक्टर मौजूद न होने की गड़बड़ी को ठीक किया गया है.(b/235256201,b/239868768)
वर्शन 1.0.0-alpha15
1 जून, 2022
androidx.paging:paging-compose:1.0.0-alpha15
रिलीज़ हो गया है. वर्शन 1.0.0-alpha15 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PagingDataAdapter
औरAsyncPagingDataDiffer
के लिए कंस्ट्रक्टर जोड़े गए हैं. येCoroutineDispatcher
के बजायCoroutineContext
स्वीकार करते हैं. (Idc878)
गड़बड़ियां ठीक की गईं
LazyPagingItems
अब शुरुआतीloadState
को सेट करता है, ताकिLoadState.Loading
रीफ़्रेश हो सके. (I55043, b/224855902)
वर्शन 1.0.0-alpha14
13 अक्टूबर, 2021
androidx.paging:paging-compose:1.0.0-alpha14
रिलीज़ हो गया है. वर्शन 1.0.0-alpha14 में ये कमिट शामिल हैं.
वर्शन 1.0.0-alpha13
29 सितंबर, 2021
androidx.paging:paging-compose:1.0.0-alpha13
रिलीज़ हो गया है. वर्शन 1.0.0-alpha13 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
LazyPagingItems.snapshot()
फ़ंक्शन कोLazyPagingItems.itemSnapshotList
प्रॉपर्टी (Ie2da8) से बदल दिया गया था- अब काम न करने वाले
LazyPagingItems.getAsState()
को हटा दिया गया है (Ie65e4)
वर्शन 1.0.0-alpha12
21 जुलाई, 2021
androidx.paging:paging-compose:1.0.0-alpha12
रिलीज़ हो गया है. वर्शन 1.0.0-alpha12 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
items(lazyPagingItems)
औरitemsIndexed(lazyPagingItems)
का इस्तेमाल,LazyColumn/Row
के साथ पेजिंग को कनेक्ट करने के लिए किया जाता है. अब ये विकल्प कुंजी पैरामीटर स्वीकार करते हैं. इससे आपको आइटम को दिखाने वाली स्टेबल कुंजी तय करने में मदद मिलती है. कुंजियों के बारे में ज़्यादा जानने के लिए, यहां जाएं. (I7986d)- अब
lazyPagingItems.getAsState(index)
फ़ंक्शन का इस्तेमाल नहीं किया जा सकता. इसके बजाय,lazyPagingItems[index]
का इस्तेमाल करें. (I086cb, b/187339372)
वर्शन 1.0.0-alpha11
30 जून, 2021
androidx.paging:paging-compose:1.0.0-alpha11
रिलीज़ हो गया है. वर्शन 1.0.0-alpha11 में ये कमिट शामिल हैं.
वर्शन 1.0.0-alpha10
2 जून, 2021
androidx.paging:paging-compose:1.0.0-alpha10
रिलीज़ हो गया है. वर्शन 1.0.0-alpha10 में ये कमिट शामिल हैं.
वर्शन 1.0.0-alpha09
18 मई, 2021
androidx.paging:paging-compose:1.0.0-alpha09
रिलीज़ हो गया है. वर्शन 1.0.0-alpha09 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- LazyPagingItems के itemCount और item getter को अब ऑब्ज़र्व किया जा सकता है. इससे इसका इस्तेमाल LazyVerticalGrid के साथ भी किया जा सकता है (Ie2446, b/171872064, b/168285687)
लिखने की सुविधा के साथ काम करने वाले प्रॉडक्ट
androidx.paging:paging-compose:1.0.0-alpha09
सिर्फ़ Compose के1.0.0-beta07
और इसके बाद के वर्शन के साथ काम करता है.
वर्शन 1.0.0-alpha08
24 फ़रवरी, 2021
androidx.paging:paging-compose:1.0.0-alpha08
रिलीज़ हो गया है. वर्शन 1.0.0-alpha08 में ये कमिट शामिल हैं.
इसे Compose 1.0.0-beta01 के साथ इंटिग्रेट करने के लिए अपडेट किया गया है.
वर्शन 1.0.0-alpha07
10 फ़रवरी, 2021
androidx.paging:paging-compose:1.0.0-alpha07
रिलीज़ हो गया है. वर्शन 1.0.0-alpha07 में ये कमिट शामिल हैं.
इसे Compose alpha12 के साथ इंटिग्रेट करने के लिए अपडेट किया गया है.
वर्शन 1.0.0-alpha06
28 जनवरी, 2021
androidx.paging:paging-compose:1.0.0-alpha06
रिलीज़ हो गया है. वर्शन 1.0.0-alpha06 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
इसे Compose 1.0.0-alpha11 पर निर्भर रहने के लिए अपडेट किया गया है.
वर्शन 1.0.0-alpha05
13 जनवरी, 2021
androidx.paging:paging-compose:1.0.0-alpha05
रिलीज़ हो गया है. वर्शन 1.0.0-alpha05 में ये कमिट शामिल हैं.
इसे Compose 1.0.0-alpha10 पर निर्भर रहने के लिए अपडेट किया गया है.
वर्शन 1.0.0-alpha04
16 दिसंबर, 2020
androidx.paging:paging-compose:1.0.0-alpha04
रिलीज़ हो गया है. वर्शन 1.0.0-alpha04 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- सुविधा से जुड़ी प्रॉपर्टी,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
को अपडेट किया गया है, ताकि मीडिएटर और सोर्स लोड की स्थितियांNotLoading
होने के बाद ही,Loading
सेNotLoading
में ट्रांज़िशन हो. इससे यह पक्का किया जा सकेगा कि रिमोट अपडेट लागू हो गया है. (I65619)
वर्शन 1.0.0-alpha03
2 दिसंबर, 2020
androidx.paging:paging-compose:1.0.0-alpha03
रिलीज़ हो गया है. वर्शन 1.0.0-alpha03 में ये कमिट शामिल हैं.
- इसे Compose 1.0.0-alpha08 के हिसाब से अपडेट किया गया है.
वर्शन 1.0.0-alpha02
11 नवंबर, 2020
androidx.paging:paging-compose:1.0.0-alpha02
रिलीज़ हो गया है. वर्शन 1.0.0-alpha02 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
LazyPagingItem
s में.peek()
,.snapshot()
,.retry()
, और.refresh()
मेथड जोड़े गए हैं. ये मेथड,AsyncPagingDataDiffer
/PagingDataAdapter
(Iddfe8, b/172041660) में उपलब्ध सुविधाओं को दिखाते हैं
वर्शन 1.0.0-alpha01
28 अक्टूबर, 2020
androidx.paging:paging-compose:1.0.0-alpha01
रिलीज़ हो गया है. वर्शन 1.0.0-alpha01 में ये कमिट शामिल हैं.
नई सुविधाएं
paging-compose
आर्टफ़ैक्ट, Paging Library और Jetpack Compose के बीच इंटिग्रेशन उपलब्ध कराता है. इस्तेमाल का एक सामान्य उदाहरण:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
वर्शन 3.0.1
वर्शन 3.0.1
21 जुलाई, 2021
androidx.paging:paging-*:3.0.1
रिलीज़ हो गया है. वर्शन 3.0.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
LivePagedList
याRxPagedList
से जनरेट की गई शुरुआती वैल्यू सेPagedList.dataSource
को ऐक्सेस करने पर, अब IllegalStateException (I96707) नहीं दिखेगा
वर्शन 3.0.0
वर्शन 3.0.0
5 मई, 2021
androidx.paging:paging-*:3.0.0
रिलीज़ हो गया है. वर्शन 3.0.0 में ये कमिट शामिल हैं.
3.0.0 वर्शन की मुख्य सुविधाएं
Paging 2.x.x के मौजूदा एपीआई के ज़्यादातर हिस्से को बंद कर दिया गया है. इसके बजाय, Paging 3 के नए एपीआई का इस्तेमाल किया जा रहा है. इससे ये सुधार किए जा सकेंगे:
- Kotlin को-रूटीन और फ़्लो के लिए बेहतर सपोर्ट
- सदस्यता रद्द करने से जुड़ी सहायता
- लोड होने की स्थिति और गड़बड़ी के सिग्नल
- फिर से कोशिश करें + रीफ़्रेश करने की सुविधा
- DataSource की तीनों सबक्लास को एक ही PagingSource क्लास में जोड़ दिया गया है
- पेज में पसंद के मुताबिक बदलाव करने की सुविधा. इसमें सेपरेटर जोड़ने के लिए, पहले से मौजूद सुविधा भी शामिल है
- हेडर और फ़ुटर लोड हो रहे हैं
वर्शन 3.0.0-rc01
21 अप्रैल, 2021
androidx.paging:paging-*:3.0.0-rc01
रिलीज़ हो गया है. वर्शन 3.0.0-rc01 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें Paging, कभी-कभी RecyclerView को no-op differ इवेंट भेजता था. इससे कुछ लिसनर पहले ही ट्रिगर हो जाते थे. (Ic507f, b/182510751)
वर्शन 3.0.0-beta03
24 मार्च, 2021
androidx.paging:paging-*:3.0.0-beta03
रिलीज़ हो गया है. वर्शन 3.0.0-beta03 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- हमने सूची को फिर से लोड करने पर, प्लेसहोल्डर को हैंडल करने के तरीके को बेहतर बनाया है. इससे RecyclerView में अचानक होने वाले बदलावों को रोका जा सकेगा. ज़्यादा जानकारी के लिए, NullPaddedDiffing.md देखें. (If1490, b/170027529, b/177338149)
- अलग-अलग PagedList बिल्डर (पुराना कंपैटिबिलिटी पाथ), अब
DataSource.Factory.create()
को कॉल किए जाने पर, Main थ्रेड परDataSource.Factory.create()
को गलत तरीके से सिंक्रोनस रूप से कॉल नहीं करते हैं..build()
(b/182798948)
वर्शन 3.0.0-beta02
10 मार्च, 2021
androidx.paging:paging-*:3.0.0-beta02
रिलीज़ हो गया है. वर्शन 3.0.0-beta02 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Rx3 एक्सटेंशन अब सही तरीके से लागू होते हैं
@ExperimentalCoroutinesApi
ऑप्ट-इन करने की ज़रूरी शर्त. इससे पहले, उन्हें@get
तरीके से मार्क किया गया था. हालांकि, Kotlin कंपाइलर इसे अनदेखा कर देता है. इसकी वजह यह है: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
गड़बड़ियां ठीक की गईं
- एक्सपेरिमेंट के तौर पर उपलब्ध एपीआई (I6aa29, b/174531520) के सार्वजनिक इस्तेमाल पर पाबंदियां लागू करें
- उस गड़बड़ी को ठीक कर दिया गया है जिसकी वजह से रिमोट रीफ़्रेश को कॉल करने पर,
PagingState
हमेशाnull
होता था. - हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, PagingSource से मिले खाली पेजों की वजह से, Paging
prefetchDistance
को पूरा करने के लिए फिर से फ़ेच नहीं कर पाता था. इस वजह से, Paging “स्टक” हो जाता था.
वर्शन 3.0.0-beta01
10 फ़रवरी, 2021
androidx.paging:paging-*:3.0.0-beta01
रिलीज़ हो गया है. वर्शन 3.0.0-beta01 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Rx2 और Rx3 रैपर अब उस एक्सपेरिमेंटल एनोटेशन को दिखाते हैं जिस पर वे निर्भर करते हैं. अगर paging-rxjava2 या paging-rxjava3 में Rx कंपैट रैपर का इस्तेमाल किया जा रहा है, तो अब आपको
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d) का इस्तेमाल करके, इस्तेमाल किए गए रैपर को एनोटेट करना होगा
गड़बड़ियां ठीक की गईं
- कभी-कभी, v2
DataSource
एपीआई का इस्तेमाल करते समय,IndexOutOfBoundsException: Inconsistency detected
की समस्या ठीक की गई DataSource
को कंपैटिबिलिटी पाथ के ज़रिए इस्तेमाल करने पर,isInvalid
कॉल को अब मुख्य थ्रेड के बजाय fetchDispatcher पर सही तरीके से लॉन्च किया जाता है. इस अपडेट में, Room केPagingSource
को लागू करते समय मुख्य थ्रेड पर डेटाबेस ऐक्सेस करने की वजह से होने वालीIllegalStateException
को ठीक किया गया है.
वर्शन 3.0.0-alpha13
27 जनवरी, 2021
androidx.paging:paging-*:3.0.0-alpha13
रिलीज़ हो गया है. वर्शन 3.0.0-alpha13 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PagingSource.getRefreshKey
को लागू करना अब ज़रूरी है. यह अब एक ऐब्स्ट्रैक्ट फ़ंक्शन है, जिसे डिफ़ॉल्ट रूप से लागू नहीं किया जाता. माइग्रेट करने वाले उपयोगकर्ता, डिफ़ॉल्ट सेटिंग का इस्तेमाल जारी रख सकते हैं. इसमें सिर्फ़null
दिखता है. हालांकि,getRefreshKey()
में उपयोगकर्ता की मौजूदा स्क्रोल पोज़िशन के आधार पर एक कुंजी दिखनी चाहिए. इससे पेजिंग,PagingState.anchorPosition
के ज़रिए व्यूपोर्ट के बीच में कॉन्टेंट लोड करना जारी रख सकती है. (I4339a)InvalidatingPagingSourceFactory
अब फ़ाइनल क्लास (Ia3b0a) है- टर्मिनल सेपरेटर (हेडर / फ़ुटर) के कॉन्फ़िगरेशन की अनुमति दें. इसके लिए, एक और वैकल्पिक SeparatorType पैरामीटर का इस्तेमाल करें. इसके दो विकल्प हैं:
FULLY_COMPLETE
- मौजूदा व्यवहार; टर्मिनल सेपरेटर जोड़ने से पहले, PagingSource और RemoteMediator, दोनों के लिए endOfPaginationReached के मार्क होने का इंतज़ार करें. अगर RemoteMediator का इस्तेमाल नहीं किया जाता है, तो remote loadState को अनदेखा कर दिया जाता है. यह विकल्प मुख्य रूप से तब काम आता है, जब आपको सेक्शन सेपरेटर सिर्फ़ तब दिखाने हों, जब सेक्शन पूरी तरह से लोड हो गया हो. इसमें रिमोट सोर्स, जैसे कि नेटवर्क से फ़ेच करना भी शामिल है.SOURCE_COMPLETE
- RemoteMediator का इस्तेमाल किए जाने पर भी, सिर्फ़ PagingSource के endOfPaginationReached को मार्क करने का इंतज़ार करें. इससे हेडर और फ़ुटर, शुरुआती लोड के साथ एक साथ दिखते हैं. इससे उपयोगकर्ताओं को टर्मिनल सेपरेटर देखने के लिए स्क्रोल नहीं करना पड़ता. (Ibe993, b/174700218)
गड़बड़ियां ठीक की गईं
- मेमोरी लीक की एक ऐसी समस्या को ठीक किया गया है जो तब होती है, जब PageFetcher के डेटा लोड करने से पहले ही PagingSource अमान्य हो जाता है. (I9606b, b/174625633)
वर्शन 3.0.0-alpha12
13 जनवरी, 2021
androidx.paging:paging-*:3.0.0-alpha12
रिलीज़ हो गया है. वर्शन 3.0.0-alpha12 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- InvalidatingPagingSourceFactory अब ऐब्सट्रैक्ट क्लास नहीं है, क्योंकि इसमें कभी कोई ऐब्सट्रैक्ट मैथड नहीं था. (I4a8c4)
- Java का इस्तेमाल करने वाले लोगों के लिए, .cachedIn() का एक ओवरलोड जोड़ा गया है. यह Lifecycle या CoroutineScope के बजाय ViewModel को स्वीकार करता है. (I97d81, b/175332619)
- Java कॉलर को एसिंक तरीके से PagingData ट्रांसफ़ॉर्मेशन ऑपरेशन इस्तेमाल करने की अनुमति दें. इसके लिए, ट्रांसफ़ॉर्म ऑपरेटर के आर्ग्युमेंट में Executor स्वीकार करें. सभी -Sync ट्रांसफ़ॉर्म ऑपरेटर से -Sync सफ़िक्स हटा दिया गया है. Kotlin Coroutine का इस्तेमाल करने वाले लोगों को, एक्सटेंशन फ़ंक्शन को कॉल करके अंतर करना होगा. यह फ़ंक्शन, सस्पेंडिंग ब्लॉक को स्वीकार करता है.
PagingData को बदलने वाले सभी ऑपरेटर को, स्टैटिक PagingDataTransforms क्लास के तहत एक्सटेंशन में ले जाया गया है. Java का इस्तेमाल करने वाले लोगों को, स्टैटिक हेल्पर के ज़रिए कॉल करना होगा. जैसे,
PagingDataTransforms.map(pagingData, transform)
Kotlin का इस्तेमाल करने वाले लोगों के लिए, सिंटैक्स एक जैसा ही है. हालांकि, आपको फ़ंक्शन इंपोर्ट करना होगा. (If6885, b/172895919)
गड़बड़ियां ठीक की गईं
- ऐसी गड़बड़ी को ठीक किया गया है जिसमें पेज नंबर के आखिर तक पहुंचने के बाद,
adapter.refresh()
के दौरानRemoteMediator.load()
को कॉल नहीं किया जाता था.
वर्शन 3.0.0-alpha11
16 दिसंबर, 2020
androidx.paging:paging-*:3.0.0-alpha11
रिलीज़ हो गया है. वर्शन 3.0.0-alpha11 में ये कमिट शामिल हैं.
नई सुविधाएं
- सेव की गई स्थिति की सुविधा को इन बुनियादी इस्तेमाल के उदाहरणों के लिए जोड़ा गया है. हालांकि, इस सुविधा पर अब भी काम चल रहा है. खास तौर पर, लेयर वाले सोर्स के मामले में:
- फ़्लो को कैश मेमोरी में सेव किया जाता है और ऐप्लिकेशन बंद नहीं होता (जैसे, फ़्लो को व्यू मॉडल में कैश मेमोरी में सेव किया जाता है और गतिविधि को प्रोसेस में फिर से बनाया जाता है)
- पेजिंग सोर्स को गिना जाता है, प्लेसहोल्डर चालू होते हैं, और लेआउट एक जैसा होता है.
एपीआई में हुए बदलाव
PagingSource.getRefreshKey()
अब स्टेबल एपीआई (I22f6f, b/173530980) हैPagingSource.invalidate
अब एक ओपन फ़ंक्शन नहीं है. अगर आपको अमान्य होने पर सूचना चाहिए, तो invalidate को बदलने के बजाय registerInvalidatedCallback तरीके का इस्तेमाल करें. (I628d9, b/173029013, b/137971356)- Pager में अब एक ही एक्सपेरिमेंटल कंस्ट्रक्टर है. साथ ही, इसमें रेगुलर कंस्ट्रक्टर भी हैं. एक्सपेरिमेंटल एपीआई को ऑप्ट-इन एनोटेशन के ज़रिए, नॉन-एक्सपेरिमेंटल पब्लिक एपीआई में लीक करने के बजाय, ऐसा किया गया है. (I9dc61, b/174531520)
- सुविधा से जुड़ी प्रॉपर्टी,
CombinedLoadStates.refresh
,CombinedLoadStates.prepend
,CombinedLoadStates.append
को अपडेट किया गया है, ताकि मीडिएटर और सोर्स लोड की स्थितियांNotLoading
होने के बाद ही,Loading
सेNotLoading
में ट्रांज़िशन हो. इससे यह पक्का किया जा सकेगा कि रिमोट अपडेट लागू हो गया है. (I65619) LoadParams.pageSize को हटा दिया गया है. इसे पहले ही बंद कर दिया गया था. सुझाव यह है कि आप अपने PagingSource में
LoadParams.loadSize
का इस्तेमाल करें.LoadParams.loadSize
हमेशाPagingConfig.pageSize
के बराबर होता है. हालांकि, शुरुआती लोड कॉल में यहPagingConfig.initialLoadSize
के बराबर होता है.अगर Pager या PagedList का इस्तेमाल किए बिना, Paging2 DataSource की जांच की जा रही है, तो हो सकता है कि
pageSize
,PagingConfig.pageSize
से मेल न खाए. ऐसा तब होता है, जबinitialLoadSize
भी सेट किया जा रहा हो. अगर आपके टेस्ट के लिए यह ज़रूरी है, तो Pager/PagedList का इस्तेमाल करें. इससे, आपके DataSource के लोड करने के तरीकों के लिए, सही PageSize अपने-आप सेट हो जाएगा. (I98ac7, b/149157296)
गड़बड़ियां ठीक की गईं
- PagingConfig.maxSize सेट होने पर, सेपरेटर का इस्तेमाल करते समय IllegalStateException की वजह से होने वाले क्रैश की समस्या को ठीक किया गया. (I0ed33, b/174787528)
- उस गड़बड़ी को ठीक किया गया है जिसमें RemoteMediator सेट होने पर, PREPEND / APPEND के लिए लोड की स्थिति, शुरुआती लोड के बाद तुरंत
NotLoading(endOfPaginationReached = true)
पर अपडेट नहीं होती थी (I8cf5a) - हमने एक गड़बड़ी को ठीक किया है .इस गड़बड़ी में, प्रज़ेंटर-साइड एपीआई, जैसे कि .snapshot(), .peek() वगैरह, ListUpdateCallback अपडेट में पुरानी (आउट-ऑफ़-डेट) सूची दिखाते थे.
- उस गड़बड़ी को ठीक किया गया है जिसमें Separators ऑपरेटर, RemoteMediator के साथ इस्तेमाल किए जाने पर हेडर या फ़ुटर नहीं जोड़ते थे
- उस गड़बड़ी को ठीक किया गया है जिसमें RemoteMediator के लिए LoadState, NotLoading पर अपडेट होने के बजाय Loading स्टेट में अटक जाता था
- एक बग ठीक किया गया है. इसमें Paging2.0 के साथ काम करने वाला एपीआई,
.asPagingSourceFactory()
,DataSource
को गलत CoroutineDispatcher पर शुरू कर सकता था. इससे क्रैश होने और एएनआर की संभावित समस्याओं को हल किया जाता है. खास तौर पर, Room के PagingSource के मौजूदा वर्शन का इस्तेमाल करते समय, जो इस कंपैटिबिलिटी पाथ का इस्तेमाल करता है.
वर्शन 3.0.0-alpha10
2 दिसंबर, 2020
androidx.paging:paging-*:3.0.0-alpha10
रिलीज़ हो गया है. वर्शन 3.0.0-alpha10 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
dataRefreshFlow
औरdataRefreshListener
एपीआई के इस्तेमाल पर रोक लगा दी गई है. इसलिए, इन्हें हटा दिया गया है. ऐसा इसलिए किया गया है, क्योंकि ये loadStateFlow / Listener अपडेट के साथ काम नहीं करते. माइग्रेट करने वाले लोगों के लिए, loadStateFlow के बराबर यह है:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
गड़बड़ियां ठीक की गईं
- RemoteMediator
REFRESH
के लिए endOfPaginationReached अब LoadState अपडेट में सही तरीके से दिखता है. साथ ही, यह रिमोटREFRESH
औरPREPEND
को ट्रिगर होने से रोकता है.APPEND
(I94a3f, b/155290248) - शुरुआती पेज खाली होने या फ़िल्टर करने की सुविधा का ज़्यादा इस्तेमाल करने की वजह से, खाली सूची दिखाने पर अब पेजिंग की सुविधा
PREPEND
शुरू होने याAPPEND
लोड होने से नहीं रुकेगी. (I3e702, b/168169730) - उस समस्या को ठीक किया गया है जिसमें अमान्य होने की प्रोसेस तेज़ी से होने पर, PagingSource की बाद की जनरेशन पर
getRefreshKey
कॉल नहीं किया जाता था. (I45460, b/170027530)
बाहरी योगदान
- InvalidatingPagingSourceFactory नाम की एक नई ऐब्स्ट्रैक्ट क्लास जोड़ी गई है. इसमें एक
.invalidate()
एपीआई है, जो इससे जनरेट होने वाले सभी PagingSource को अमान्य कर देता है. @claraf3 को धन्यवाद! (Ie71fc, b/160716447)
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- RemoteMediator का इस्तेमाल करते समय, ऐसा हो सकता है कि .insertSeparators() ट्रांसफ़ॉर्म से मिले हेडर और फ़ुटर तुरंत न दिखें b/172254056
- RemoteMediator का इस्तेमाल करने पर, रिमोट
LoadState
अटक सकता है. ऐसा तब होता है, जब अमान्य होने की प्रोसेस औरPagingSource.load(LoadParams.Refresh(...))
,RemoteMediator.load()
के b/173717820 को वापस भेजने से पहले पूरी हो जाती है
वर्शन 3.0.0-alpha09
11 नवंबर, 2020
androidx.paging:paging-*:3.0.0-alpha09
रिलीज़ हो गया है. वर्शन 3.0.0-alpha09 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- replaceWith क्लॉज़ के साथ, dataRefreshFlow / Listener के तरीकों को पूरी तरह से बंद कर दिया गया है. (I6e2dd)
गड़बड़ियां ठीक की गईं
- RemoteMediator के साथ सेपरेटर इस्तेमाल करते समय,
IllegalArgumentException
के थ्रो होने की समस्या को ठीक किया गया है. साथ ही, endOfPagination दिखाने वाला रिमोट लोड अब भी चल रहा है, जबकि अमान्य होने की स्थिति ट्रिगर हो गई है (I3a260)
वर्शन 3.0.0-alpha08
28 अक्टूबर, 2020
androidx.paging:paging-*:3.0.0-alpha08
रिलीज़ हो गया है. वर्शन 3.0.0-alpha08 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Kotlin / Java के
DataSource.InvalidatedCallback
वैरिएंट को एक साथ इस्तेमाल किया जा सकता है. इसके लिए, Kotlin में SAM-conversion को चालू करना होगा. यह फ़ंक्शनल इंटरफ़ेस के ज़रिए किया जा सकता है. यह Kotlin 1.4 में उपलब्ध है. इस अपडेट में, एक गड़बड़ी को भी ठीक किया गया है. इस गड़बड़ी में,.map
या.mapByPage
से बदलने के बाद, अमान्य किए गए कॉलबैक के Kotlin वर्शन को कॉल नहीं किया जाता था. (I1f244, b/165313046)
गड़बड़ियां ठीक की गईं
- ViewPager के साथ Paging के इंटरैक्शन को काफ़ी हद तक बेहतर बनाया गया है. खास तौर पर, पेज के अमान्य होने की वजह से, अब पेजिंग
RemoteMediator#load
कॉल को रद्द नहीं करेगी. इसके अलावा, यह तब तक डेटा जोड़ने/पहले से मौजूद डेटा में बदलाव करने का अनुरोध नहीं करेगा, जब तक रीफ़्रेश करने का अनुरोध पूरा नहीं हो जाता. (I6390b, b/162252536) - androidx के लिए, MissingGetterMatchingBuilder के लिए एपीआई लिंट चेक की सुविधा चालू की गई है (I4bbea, b/138602561)
- हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, बैकग्राउंड थ्रेड से RecyclerView को सूचना देने पर,
.withLoadState*
ConcatAdapter
हेल्पर क्रैश हो जाते थे (I18bb5, b/170988309) - एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटे और भरे हुए पेज को लोड करने पर, कभी-कभी प्रीफ़ेच की सुविधा सही तरीके से लोड होने से रुक जाती थी.Iffda3 b/169259468
वर्शन 3.0.0-alpha07
1 अक्टूबर, 2020
androidx.paging:paging-*:3.0.0-alpha07
रिलीज़ हो गया है. वर्शन 3.0.0-alpha07 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- Guava पर आधारित Async PagingData ऑपरेटर अब एक्ज़ीक्यूशन कॉन्टेक्स्ट को कंट्रोल करने के लिए, Executor को पैरामीटर के तौर पर स्वीकार करते हैं. (Id4372)
गड़बड़ियां ठीक की गईं
- रेस की स्थिति की वजह से, RemoteMediator में IndexOutOfBounds अपवाद को ठीक किया गया है. (I00b7f, b/165821814)
- DataSource -> PagingSource कन्वर्ज़न में रेस कंडीशन को ठीक किया गया है. इससे, PagingSource, DataSource से अमान्य होने के सिग्नल को अनदेखा कर सकता है.
- पेज फ़ेच करने के लॉजिक में मौजूद एक समस्या को ठीक किया गया है. इस समस्या की वजह से, कभी-कभी PagingSource की नई जनरेशन तब तक नहीं दिखती थी, जब तक PagingDataAdapter.refresh() को शुरू नहीं किया जाता था
- उस समस्या को ठीक किया गया है जिसकी वजह से, RemoteMediator के साथ PagingSource में बदले गए DataSource (जैसे कि Room से बनाया गया DataSource) का इस्तेमाल करते समय, कभी-कभी स्क्रोल-पोज़िशन गायब हो जाती थी
बाहरी योगदान
- PagingData के लिए RxJava2, RxJava3, और Guava पर आधारित एसिंक्रोनस ट्रांसफ़ॉर्मेशन ऑपरेटर जोड़ने के लिए, @simonschiller को धन्यवाद!
वर्शन 3.0.0-alpha06
2 सितंबर, 2020
androidx.paging:paging-*:3.0.0-alpha06
रिलीज़ हो गया है. वर्शन 3.0.0-alpha06 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
UnsupportedOperationException
को कॉल करने पर, अब यह साफ़ तौर पर बताया जाता है कि स्टेबल आईडी के लिए सहायता उपलब्ध नहीं है.PagingDataAdapter.setHasStableIds
(Ib3890, b/158801427)
गड़बड़ियां ठीक की गईं
- insertSeparators अब खाली पेजों को फ़िल्टर नहीं करता है. इससे प्रज़ेंटर को प्रीफ़ेच दूरी का पालन करने की अनुमति मिलती है. ऐसा उन मामलों में भी होता है जहां कई खाली पेज डाले जाते हैं. (I9cff6, b/162538908)
वर्शन 3.0.0-alpha05
19 अगस्त, 2020
androidx.paging:paging-*:3.0.0-alpha05
रिलीज़ हो गया है. वर्शन 3.0.0-alpha05 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अब पेजिंग की सुविधा, पेजों को सही तरीके से प्रीफ़ेच करती है. भले ही, दिखाए गए डेटा को ज़्यादा फ़िल्टर किया गया हो
LoadResult.Error
को फिर से लोड करने पर, आइटम के ऐक्सेस को गलत तरीके से फिर से ट्रिगर नहीं किया जाएगा
बाहरी योगदान
- कुछ टेस्ट को साफ़ करने में मदद करने के लिए, क्लारा एफ़ को धन्यवाद! (549612)
वर्शन 3.0.0-alpha04
5 अगस्त, 2020
androidx.paging:paging-*:3.0.0-alpha04
रिलीज़ हो गया है. वर्शन 3.0.0-alpha04 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
AsyncPagingDataDiffer
औरPagingDataAdapter
मेंpeek()
एपीआई जोड़ा गया है, ताकि ट्रिगर पेज लोड किए बिना, दिखाए गए डेटा को ऐक्सेस किया जा सके. (I38898, b/159104197)PagingDataAdapter
औरAsyncPagingDataDiffer
मेंsnapshot()
एपीआई जोड़ा गया है. इससे पेज फ़ेच किए बिना, दिखाए गए आइटम वापस पाए जा सकते हैं. (I566b6, b/159104197)PagingData.from(List<T>)
कंस्ट्रक्टर जोड़ा गया है, ताकि स्टैटिक सूचियां दिखाई जा सकें.इन्हें कुल PagingData फ़्लो के साथ जोड़ा जा सकता है, ताकि कुछ स्थितियों में स्टैटिक सूचियां दिखाई जा सकें. जैसे, शुरुआती REFRESH के पूरा होने से पहले या सिर्फ़ ट्रांसफ़ॉर्मेशन की जांच करने के लिए. (Id134d)- dataRefresh Flow / Listener APIs को बंद कर दिया गया है. इनका इस्तेमाल REFRESH पर दिखाए गए आइटम की स्थिति को दिखाने के लिए किया जाता था. हालांकि, loadState Flow / Listener callback timing और itemCount प्रॉपर्टी में सुधार होने की वजह से, अब इनकी ज़रूरत नहीं है (Ia19f3)
PagingSource
औरRemoteMediator
के लिए, RxJava3 के साथ काम करने वाले रैपर जोड़े गए (I49ef3, b/161480176)
गड़बड़ियां ठीक की गईं
PositionalDataSource
कोPagingSource
में बदल दिया गया है. इसके लिए,toPagingSourceFactory
हेल्पर का इस्तेमाल किया गया है. इसमें Room से जनरेट किए गएPagingSource
भी शामिल हैं. अब ये जंप करने की सुविधा के साथ सही तरीके से मार्क हो जाते हैं. (I3e84c, b/162161201)- submitData के सिंक्रोनस वैरिएंट का इस्तेमाल करने पर, कभी-कभी रेस की वजह से
ClosedSendChannelException
(I4d702, b/160192222) गड़बड़ी होती थी. इस गड़बड़ी को ठीक कर दिया गया है
बाहरी योगदान
- Slack की ओर से, RxJava3 के साथ काम करने वाले रैपर जोड़ने के लिए Zac Sweers को धन्यवाद! (I49ef3, b/161480176)
वर्शन 3.0.0-alpha03
22 जुलाई, 2020
androidx.paging:paging-*:3.0.0-alpha03
रिलीज़ हो गया है. वर्शन 3.0.0-alpha03 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
- PagingState के लिए कंस्ट्रक्टर अब सार्वजनिक है. इससे getRefreshKey() के टेस्ट को लागू करना आसान हो जाएगा (I8bf15)
- Java से DataSource kotlin map फ़ंक्शन के वैरिएंट छिपाए गए हैं, ताकि ओरिजनल और kotlin वैरिएंट के बीच अस्पष्टता को दूर किया जा सके. (If7b23, b/161150011)
- Kotlin का इस्तेमाल करने वाले लोगों की सुविधा के लिए बनाए गए फ़ालतू एपीआई को @JvmSynthetic के तौर पर मार्क किया गया है (I56ae5)
- LoadResult.Page के कंस्ट्रक्टर के लिए ओवरलोड जोड़े गए हैं, जो itemsBefore और itemsAfter को COUNT_UNDEFINED पर डिफ़ॉल्ट करता है (I47849)
- मौजूदा PagingData ऑपरेटर को निलंबित करने के तरीके स्वीकार करने के लिए बनाया गया है. साथ ही, Java का इस्तेमाल करने वाले लोगों के लिए, mapSync, flatMapSync, और filterSync जैसे नए ऑपरेटर पेश किए गए हैं. मौजूदा ट्रांसफ़ॉर्मेशन के तरीकों को एक्सटेंशन फ़ंक्शन में ले जाया गया है. इसलिए, Kotlin का इस्तेमाल करने वाले लोगों को अब इन्हें इंपोर्ट करना होगा. (I34239, b/159983232)
गड़बड़ियां ठीक की गईं
- Room (और PositionalDataSource) PagingSources अब पहले पेज के हिस्से के तौर पर लीडिंग सेपरेटर दिखाएंगे, ताकि उपयोगकर्ता को इसे देखने के लिए स्क्रोल न करना पड़े. (I6f747, b/160257628)
- अब प्लेसहोल्डर पर आइटम ऐक्सेस करने से, PagingSource लोड सही तरीके से ट्रिगर होते हैं. ऐसा तब तक होता है, जब तक कि PagingData.filter() से बदले जाने के बाद, अनुरोध किए गए इंडेक्स को पूरा करने वाला पेज वापस नहीं आ जाता (I95625, b/158763195)
- उस बग को ठीक किया गया है जिसकी वजह से, कभी-कभी PagingSource के स्क्रोल करने पर गड़बड़ी होती थी. इससे PagingDataAdapter.retry() को फिर से कोशिश करने से रोका जा सकता था. (I1084f, b/160194384)
- इस कुकी से उस समस्या को ठीक किया जाता है जिसमें पेज छोड़ने के बाद आइटम ऐक्सेस करने पर, पेज लोड नहीं होते हैं. हालांकि, आइटम ऐक्सेस, प्रीफ़ेच डिस्टेंस (Ie95ae, b/160038730) के दायरे में था
- PagingConfig.maxSize को सेट करने पर, अब ड्रॉप इवेंट (I2be29, b/159667766) के बाद प्लेसहोल्डर चालू नहीं होते
वर्शन 3.0.0-alpha02
24 जून, 2020
androidx.paging:paging-*:3.0.0-alpha02
रिलीज़ हो गया है. वर्शन 3.0.0-alpha02 में ये कमिट शामिल हैं.
एपीआई में हुए बदलाव
PagingConfig
के कंस्ट्रक्टर के लिए, सामान्य डिफ़ॉल्ट वैल्यू (I39c50, b/158576040) के साथ ओवरलोड जोड़े गएPagingDataAdapter
औरAsyncPagingDataDiffer
के कंस्ट्रक्टर के लिए ओवरलोड जोड़े गए हैं. इनमें सामान्य डिफ़ॉल्ट वैल्यू (Ie91f5) शामिल हैं- अडैप्टर एपीआई,
dataRefreshFlow
औरdataRefreshListener
अब एक बूलियन पास करते हैं. इससे यह पता चलता है किPagingData
खाली है या नहीं (I6e37e, b/159054196) - RemoteMediator के लिए RxJava और Guava API जोड़े गए - RxRemoteMediator और ListenableFutureRemoteMediator
- सामान्य आइटम ऐक्सेस करने के लिए, PagingState में हेल्पर जोड़े गए हैं. जैसे,
isEmpty()
औरfirstItemOrNull()
(I3b5b6, b/158892717)
गड़बड़ियां ठीक की गईं
- Pager अब फ़ैक्ट्री में PagingSource के फिर से इस्तेमाल होने की जांच करता है, ताकि अमान्य PagingSource के गलती से फिर से इस्तेमाल होने से रोका जा सके. इससे एक अस्पष्ट गड़बड़ी (I99809, b/158486430) होती थी
- RemoteMediator REFRESH के फ़ेल होने पर, अब PagingSource को लोड होने से नहीं रोका जाएगा (I38b1b, b/158892717)
submitData
के नॉन-सस्पेंडिंग वर्शन कोsubmitData
के सस्पेंडिंग वर्शन के बाद कॉल करने पर, अब कईPagingData
पर एक साथ कलेक्शन की वजह से क्रैश नहीं होता. (I26358, b/158048877)- कॉन्फ़िगरेशन में बदलाव करने के बाद, "पेजर से दो बार डेटा इकट्ठा नहीं किया जा सकता" अपवाद को ठीक किया गया है (I58bcc, b/158784811)
वर्शन 3.0.0-alpha01
10 जून, 2020
androidx.paging:paging-*:3.0.0-alpha01
रिलीज़ हो गया है. वर्शन 3.0.0-alpha01 में ये कमिट शामिल हैं.
Paging Library को 3.0 वर्शन में अपडेट कर दिया गया है, ताकि कई नई सुविधाओं को चालू किया जा सके.
3.0 वर्शन की नई सुविधाएं
- Kotlin को-रूटीन और फ़्लो के लिए बेहतर सपोर्ट.
- coroutines suspend फ़ंक्शन, RxJava Single या Guava ListenableFuture प्रिमिटिव के साथ एसिंक लोडिंग की सुविधा.
- लोड होने की स्थिति और गड़बड़ी के सिग्नल पहले से मौजूद होते हैं, ताकि रिस्पॉन्सिव यूज़र इंटरफ़ेस (यूआई) डिज़ाइन किया जा सके. इसमें फिर से कोशिश करने और रीफ़्रेश करने की सुविधा भी शामिल है.
- रिपॉज़िटरी लेयर में सुधार
- डेटा सोर्स का आसान इंटरफ़ेस
- नेटवर्क और डेटाबेस के पेजों को आसानी से नंबर देना
- सदस्यता रद्द करने से जुड़ी सहायता
- प्रज़ेंटेशन लेयर में किए गए सुधार
ऐसी समस्याएं जिनके बारे में जानकारी पहले से है
- Paging 3 के JavaDoc अभी उपलब्ध नहीं हैं. इस बीच, कृपया ऊपर लिंक की गई गाइड या Kotlin के दस्तावेज़ों का इस्तेमाल करें. (b/158614050)
वर्शन 2.1.2
वर्शन 2.1.2
18 मार्च, 2020
androidx.paging:paging:2.1.2
रिलीज़ हो गया है. वर्शन 2.1.2 में, 2.1.0 के मुकाबले ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- अमान्य होने के दौरान किसी पोज़िशन को बदलने पर, कुछ मामलों में
IndexOutOfBoundsException
से जुड़ी समस्या ठीक की गई.
रिलीज़ से जुड़ी समस्या
पेजिंग लाइब्रेरी का वर्शन
2.1.1
, गलत तरीके से कॉन्फ़िगर की गई ब्रांच से रिलीज़ किया गया था. इससे, आंशिक रूप से लागू किए गए एपीआई और आने वाली रिलीज़ में उपलब्ध होने वाली सुविधाओं के बारे में जानकारी मिल गई.पेजिंग
2.1.2
में, लोड-सेंटरिंग से जुड़ी समस्या को ठीक करने वाला वह फ़िक्स शामिल है जिसे मूल रूप से 2.1.1 में रिलीज़ किया गया था. हालांकि, इस बार इसे 2.1.0 रिलीज़ के ऊपर सही तरीके से चुना गया है. अगर फ़िलहाल 2.1.1 वर्शन का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि आप इस रिलीज़ पर अपग्रेड करें.
वर्शन 2.1.1
वर्शन 2.1.1
18 दिसंबर, 2019
androidx.paging:paging-*:2.1.1
रिलीज़ हो गया है. वर्शन 2.1.1 में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- जगह की जानकारी देने वाले डेटा सोर्स से लगातार लोड होने वाले शुरुआती डेटा को अब आखिरी बार ऐक्सेस किए गए डेटा के हिसाब से दिखाया जाता है. ऐसा तब होता है, जब प्लेसहोल्डर बंद होते हैं
वर्शन 2.1.0
वर्शन 2.1.0
25 जनवरी, 2019
पेजिंग 2.1.0
को 2.1.0-rc01
में किए गए बदलावों के बिना रिलीज़ किया गया है.
वर्शन 2.1.0-rc01
6 दिसंबर, 2018
पेजिंग 2.1.0-rc01
को 2.1.0-beta01
में किए गए बदलावों के बिना रिलीज़ किया गया है.
वर्शन 2.1.0-beta01
1 नवंबर 2018
पेजिंग 2.1.0-beta01
को 2.1.0-alpha01
में किए गए बदलावों के बिना रिलीज़ किया गया है.
वर्शन 2.1.0-alpha01
12 अक्टूबर, 2018
पेजिंग 2.1.0-alpha01
में दो मुख्य बदलाव किए गए हैं. पहला, पेज ड्रॉपिंग की सुविधा जोड़ी गई है. दूसरा, हर आर्टफ़ैक्ट के लिए KTX एक्सटेंशन लाइब्रेरी जोड़ी गई है. इसके अलावा, एपीआई में कई अन्य बदलाव किए गए हैं और बग ठीक किए गए हैं.
एपीआई में हुए बदलाव
- मेमोरी में लोड किए गए आइटम की संख्या को सीमित करने के लिए,
PagedList.Config.Builder.setMaxSize()
जोड़ा गया. androidx.paging.Config()
कोPagedList.Config.Builder
के Kotlin विकल्प के तौर पर जोड़ा गयाandroidx.paging.PagedList()
कोPagedList.Builder
के Kotlin विकल्प के तौर पर जोड़ा गयाDataSourceFactory.toLiveData()
कोLivePagedListBuilder
के Kotlin विकल्प के तौर पर जोड़ा गयाRxPagedListBuilder
के Kotlin विकल्प के तौर पर,DataSourceFactory.toObservable()
औरtoFlowable()
को जोड़ा गया- जब PagedList को स्वैप किया जाता है, तब सुनने के लिए
AsyncPagedListDiffer.addPagedListListener()
जोड़ा गया. b/111698609 PagedListAdapter.onCurrentListChanged()
वैरिएंट जोड़ा गया है, जो पुरानी और नई सूची को पास करता है. साथ ही, पिछले वैरिएंट को बंद कर दिया गया है.PagedListAdapter/AsyncPagedListDiffer.submitList()
वैरिएंट जोड़े गए हैं. ये एक अतिरिक्त कॉलबैक लेते हैं, जो अंतर देखने के बाद, पेज वाली सूची दिखने पर ट्रिगर होता है. इससे, PagedList स्वैप को अन्य यूज़र इंटरफ़ेस (यूआई) अपडेट के साथ सिंक किया जा सकता है. b/73781068PagedList.getLoadedCount()
को इसलिए जोड़ा गया है, ताकि आपको पता चल सके कि मेमोरी में कितने आइटम हैं. ध्यान दें कि अगर प्लेसहोल्डर बंद हैं, तो रिटर्न वैल्यू हमेशा.size()
के बराबर होती है.
गड़बड़ियां ठीक की गईं
- सूचियों का फिर से इस्तेमाल किए जाने पर, अंतर की तुलना करते समय रेस कंडीशन को ठीक किया गया b/111591017
PagedList.loadAround()
अब इंडेक्स अमान्य होने परIndexOutOfBoundsException
दिखाता है. इससे पहले, यह किसी अन्य अपवाद की वजह से क्रैश हो सकता था.- हमने एक ऐसी समस्या को ठीक किया है जिसमें शुरुआती लोड का साइज़ बहुत छोटा होने और डेटा में कोई बदलाव न होने की वजह से, आगे की लोडिंग नहीं होती थी b/113122599
वर्शन 2.0.0
वर्शन 2.0.0
1 अक्टूबर, 2018
पेजिंग 2.0.0
को एक बग फ़िक्स के साथ रिलीज़ किया गया है.
गड़बड़ियां ठीक की गईं
PositionalDataSource
और प्लेसहोल्डर b/114635383 का इस्तेमाल करके बहुत तेज़ी से स्क्रोल करने पर, क्रैश होने की समस्या को ठीक किया गया.
वर्शन 2.0.0-beta01
2 जुलाई, 2018
गड़बड़ियां ठीक की गईं
- कुछ मामलों में, पहले से मौजूद कॉन्टेंट के गायब होने की समस्या ठीक की गई (प्लेसहोल्डर बंद हैं, PositionalDataSource) b/80149146
- (
1.0.1
में पहले ही रिलीज़ हो चुका है) क्रैश होने की उन समस्याओं को ठीक किया गया है जिनमेंPagedListAdapter
औरAsyncPagedListDiffer
, मूव इवेंट के बारे में सूचना नहीं दे पाते थे. b/110711937
AndroidX से पहले की डिपेंडेंसी
AndroidX से पहले के Paging के वर्शन के लिए, ये डिपेंडेंसी शामिल करें:
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"
}
वर्शन 1.0.1
वर्शन 1.0.1
26 जून, 2018
पेजिंग 1.0.1
को runtime
में एक बग फ़िक्स के साथ रिलीज़ किया गया है. हमारा सुझाव है कि आप स्थिरता के लिए 1.0.1
का इस्तेमाल करें. Paging RxJava2 1.0.1
भी रिलीज़ किया गया है. यह 1.0.0-rc1
के जैसा ही है.
गड़बड़ियां ठीक की गईं
- उन क्रैश को ठीक किया गया है जिनमें
PagedListAdapter
औरAsyncPagedListDiffer
, मूव इवेंट का सिग्नल नहीं दे पाते थे. b/110711937
RxJava2 वर्शन 1.0.0
RxJava2 वर्शन 1.0.0-rc1
16 मई, 2018
Paging RxJava2 � release candidate में जा रहा है. इसमें शुरुआती ऐल्फ़ा वर्शन के मुकाबले कोई बदलाव नहीं किया गया है.1.0.0-rc1
वर्शन 1.0.0
वर्शन 1.0.0-rc1
19 अप्रैल, 2018 पेजिंग रिलीज़ कैंडिडेट
पेजिंग 1.0.0
रिलीज़ के लिए, हमें कोई और समस्या नहीं मिली है. साथ ही, कोई नई सुविधा भी शेड्यूल नहीं की गई है. 1.0.0-rc1
का इस्तेमाल करने के लिए, कृपया अपने प्रोजेक्ट अपग्रेड करें. साथ ही, इसे बेहतर बनाने में हमारी मदद करें, ताकि हम एक बेहतरीन 1.0.0
लॉन्च कर सकें.
इस रिलीज़ में कोई बदलाव नहीं किया गया है. यह 1.0.0-beta1
के जैसा ही है.
वर्शन 1.0.0-beta1
5 अप्रैल, 2018
पेजिंग की सुविधा, रिलीज़ कैंडिडेट के तौर पर उपलब्ध होने से पहले कुछ समय के लिए बीटा वर्शन में उपलब्ध होगी.
हम Paging 1.0
के लिए, एपीआई में और बदलाव करने की योजना नहीं बना रहे हैं. साथ ही, एपीआई में किसी भी तरह के बदलाव के लिए, ज़रूरी शर्तें बहुत ज़्यादा हैं.
Paging के लिए Alpha RxJava2 का सपोर्ट, एक अलग वैकल्पिक मॉड्यूल (android.arch.paging:rxjava2:1.0.0-alpha1
) के तौर पर रिलीज़ किया गया है. यह कुछ समय के लिए अलग से वर्शन किया जाएगा, ताकि इसे बेहतर बनाया जा सके.
यह नई लाइब्रेरी, LivePagedListBuilder
के लिए RxJava2 का विकल्प उपलब्ध कराती है. यह Observable
और Flowable
बना सकती है. साथ ही, Executor
के बजाय Scheduler
लेती है:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
नई सुविधाएं
android.arch.paging:rxjava2
नए आर्टफ़ैक्ट के ज़रिएRxPagedListBuilder
को जोड़ा गया है.
एपीआई में हुए बदलाव
बिल्डर में एक्ज़ीक्यूटर की भूमिका के बारे में ज़्यादा जानकारी देने के लिए, एपीआई में बदलाव किए गए हैं:
setBackgroundThreadExecutor()
का नाम बदलकरsetFetchExecutor()
किया गया (PagedList.Builder
औरLivePagedListBuilder
में)setMainThreadExecutor()
का नाम बदलकरsetNotifyExecutor()
(PagedList.Builder
में) किया गया.
PagedList.mCallbacks
के सदस्यों के लिए, निजी तौर पर लॉक करने की सुविधा ठीक की गई.
गड़बड़ियां ठीक की गईं
LivePagedListBuilder
, Arch Components IO थ्रेड पूल के बजाय, तय किए गए एक्ज़ीक्यूटर पर शुरुआतीPagedList
लोड को ट्रिगर करता है.इंटरनल
DataSource
रैपर में अमान्य करने के व्यवहार को ठीक किया गया है. इनका इस्तेमालDataSource.map
को लागू करने के साथ-साथ, प्लेसहोल्डर-बंदPositionalDataSource
लोडिंग के लिए किया जाता है b/77237534
वर्शन 1.0.0-alpha7
21 मार्च, 2018
पेजिंग 1.0.0-alpha7
को Lifecycles 1.1.1
के साथ रिलीज़ किया गया है. Paging alpha7, ऊपर बताई गई Function
क्लास के मूव होने पर निर्भर करता है. इसलिए, आपको lifecycle:runtime
डिपेंडेंसी को android.arch.lifecycle:runtime:1.1.1
पर अपडेट करना होगा.
पेजिंग alpha7
को बीटा वर्शन से पहले की आखिरी रिलीज़ के तौर पर प्लान किया गया है.
एपीआई में हुए बदलाव
DataSource.LoadParams
ऑब्जेक्ट में अब एक सार्वजनिक कंस्ट्रक्टर है औरDataSource.LoadCallback
ऑब्जेक्ट अब ऐब्स्ट्रैक्ट हैं. इससे, मॉक कॉलबैक के साथDataSource
को रैप किया जा सकता है या सीधे तौर परDataSource
की जांच की जा सकती है. b/72600421- DataSource और DataSource.Factory के लिए मैपर
map(Function<IN,OUT>)
की मदद से,DataSource
से लोड किए गए नतीजों को बदला, रैप किया या सजाया जा सकता है.mapByPage(<List<IN>,List<OUT>>)
, बैच प्रोसेसिंग के लिए भी ऐसा ही करता है. उदाहरण के लिए, अगर SQL से लोड किए गए आइटम को किसी अन्य डेटाबेस से क्वेरी करने की ज़रूरत है, तो इसे बैच के तौर पर किया जा सकता है.
PagedList#getDataSource()
को सुविधा के तौर पर जोड़ा गया b/72611341- एपीआई से, बंद की गई सभी क्लास हटा दी गई हैं. इनमें
recyclerview.extensions
पैकेज औरLivePagedListProvider
के बचे हुए हिस्से भी शामिल हैं. DataSource.Factory
को इंटरफ़ेस से ऐब्स्ट्रैक्ट क्लास में बदल दिया गया है, ताकि मैप की सुविधा चालू की जा सके.
गड़बड़ियां ठीक की गईं
- बिल्डर को फ़ाइनल के तौर पर बदला गया. b/70848565
- Room
DataSource
को लागू करने से जुड़ी समस्या को अब ठीक कर दिया गया है, ताकि मल्टी-टेबल क्वेरी को हैंडल किया जा सके. यह सुधार Room 1.1.0-beta1 में शामिल है. इसके बारे में ऊपर बताया गया है. - उस गड़बड़ी को ठीक किया गया है जिसमें प्लेसहोल्डर चालू होने पर,
PositionalDataSource
के लिएBoundaryCallback.onItemAtEndLoaded
को ट्रिगर नहीं किया जाता था. ऐसा तब होता था, जब कुल साइज़, पेज के साइज़ का पूरा-पूरा मल्टीपल होता था.
वर्शन 1.0.0-alpha5
22 जनवरी, 2018
गड़बड़ियां ठीक की गईं
- प्लेसहोल्डर बंद होने पर पेज लोड होने की समस्या ठीक की गई b/70573345
- IllegalArgumentException गड़बड़ी b/70360195 का पता लगाने के लिए अतिरिक्त लॉगिंग की गई (और Room-साइड फ़िक्स का अनुमान लगाया गया)
- Javadoc के सैंपल कोड से जुड़ी समस्याएं ठीक की गईं b/70411933, b/71467637