पृष्ठांकन
इस टेबल में, androidx.paging
ग्रुप के सभी आर्टफ़ैक्ट की सूची होती है.
सह-प्रॉडक्ट | रिलीज़ किया गया जांचा और परखा हुआ वर्शन | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
डिपेंडेंसी का एलान करना
पेजिंग पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.
अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle
फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:
Groovy
dependencies { def paging_version = "3.3.4" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.4" }
Kotlin
dependencies { val paging_version = "3.3.4" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.4") }
Kotlin एक्सटेंशन इस्तेमाल करने के बारे में जानकारी के लिए, ktx दस्तावेज़ देखें.
डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव
आपके सुझाव, शिकायत या राय से हमें Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. नई लाइब्रेरी बनाने से पहले, कृपया इस लाइब्रेरी में मौजूद मौजूदा समस्याओं पर एक नज़र डालें. किसी मौजूदा समस्या पर अपना वोट जोड़ने के लिए, स्टार बटन पर क्लिक करें.
ज़्यादा जानकारी के लिए, समस्या ट्रैकर का दस्तावेज़ देखें.
वर्शन 3.3
3.3.4 वर्शन
13 नवंबर, 2024
androidx.paging:paging-*:3.3.4
रिलीज़ हो गया है. 3.3.4 वर्शन में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- पेजिंग 3.3 या उसके बाद के वर्शन को शामिल करने वाली Android यूनिट टेस्ट, अब
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-मल्टीप्लैटफ़ॉर्म के नए टारगेट जोड़े गए हैं: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
या गड़बड़ी की स्थिति में से किसी एक में सेट नहीं हो जाता.PagingData.empty()
अब डिफ़ॉल्ट रूप सेNotLoading
स्टेटस डिस्पैच करता है. ऐसा तब तक होता है, जब तक उसके कंस्ट्रक्टर में कस्टमLoadStates
नहीं भेजे जाते. यह मौजूदा व्यवहार से अलग है, जहांPagingDataAdapter
को सबमिट करने परLoadStates
डिस्पैच नहीं होता याLazyPagingItems
के तौर पर इकट्ठा किए जाने पर, लोडिंग स्टेटस डिस्पैच करता है.LazyPagingItems
के तौर पर इकट्ठा किए जाने पर, अब शुरुआती कॉम्पोज़िशन के तुरंत बाद खाली सूची भी दिखेगी.
Kotlin मल्टीप्लैटफ़ॉर्म के साथ काम करना
पेजिंग अब 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 एनोटेशन
@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
, गड़बड़ी की स्थिति में है या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 मल्टीप्लैटफ़ॉर्म के साथ काम करना
पेजिंग अब 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 को धन्यवाद, जिन्होंने पेजिंग को 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()
एपीआई,PagingData.from(List)
का इस्तेमाल करके बनाए गए फ़्लो को पास करने पर, फ़्लो को हैंग कर देता था. इसकी वजह यह थी किasSnapshot()
के पास लोडिंग खत्म होने के समय की कोई जानकारी नहीं होती (PagingData.from(List, LoadStates)
ओवरलोड के उलट). यह तरीका सिर्फ़ उन फ़्लो के लिए काम करता है जिन्हें पूरा किया जा सकता है. जैसे,flowOf(PagingData.from(...))
. ऐसे फ़्लो के लिए (जैसे,MutableStateFlow
,PagingData.from
के उस ओवरलोड का इस्तेमाल करें जोLoadStates
उपलब्ध कराता है). (I502c3) - पेजिंग कंपोज़ अब अंदरूनी तौर पर
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
कोMutableStateFlow
(उदाहरण के लिए,MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
) में रैप करके, नकली डेटा की सूची की झलक देखने की सुविधा. इस फ़्लो को@Preview
कॉम्पोज़ेबल में,collectAsLazyPagingItems()
के लिए रिसीवर के तौर पर पास करें, ताकि झलक देखी जा सके.LazyVerticalGrid
औरHorizontalPager
जैसे सभी लेज़ी लेआउट के साथ-साथ, Wear और टीवी लाइब्रेरी के कस्टम लेज़ी कॉम्पोनेंट के साथ काम करता है. ऐसा,LazyPagingItems
के नए लोअर लेवल एक्सटेंशन के तरीकोंitemKey
औरitemContentType
की मदद से किया गया है. इन तरीकों से,key
औरcontentType
पैरामीटर को स्टैंडर्डitems
एपीआई में लागू करने में मदद मिलती है. ये एपीआई,LazyColumn
औरLazyVerticalGrid
के लिए पहले से मौजूद हैं. साथ ही,HorizontalPager
जैसे एपीआई में भी इनके बराबर के एपीआई मौजूद हैं.items(lazyPagingItems)
औरitemsIndexed(lazyPagingItems)
, सिर्फ़LazyListScope
के साथ काम करते थे. इन्हें बंद कर दिया गया है.
- नया
paging-testing
आर्टफ़ैक्ट, जो आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग और पेजिंग के साथ उसके इंटिग्रेशन के लिए डिज़ाइन किए गए एपीआई उपलब्ध कराता है. उदाहरण के लिए, इसमें ये शामिल हैंTestPager
क्लास, जो आपको पेजर और रीयल यूज़र इंटरफ़ेस (यूआई) से अलग, अपने कस्टमPagingSource
लागू करने के व्यवहार की पुष्टि करने की सुविधा देती है.-
asPagingSourceFactory
ऐसे एपीआई जोFlow<List<Value>>
या स्टैटिकList<Value>
कोPagingSourceFactory
में बदलते हैं. इसPagingSourceFactory
को टेस्ट में पेजर को पास किया जा सकता है asSnapshot
Flow<PagingData<Value>>
पर Kotlin एक्सटेंशन, जोFlow<PagingData<Value>>
को डायरेक्टList<Value>
में बदलता है.asSnapshot lambda
की मदद से,scrollTo
याappendScrollWhile
जैसे एपीआई के ज़रिए अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की नकल की जा सकती है. इससे, पेज किए गए डेटा के सेट में किसी भी समय, डेटा के स्नैपशॉट के सही होने की पुष्टि की जा सकती है.
- पेजिंग की डीबगिंग की जानकारी को दो लेवल में दिखाने के लिए, डिफ़ॉल्ट लॉग जोड़े गए हैं:
VERBOSE
औरDEBUG
. लॉग कोadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
कमांड की मदद से चालू किया जा सकता है. यह सेटिंग, व्यू के साथ पेजिंग या Compose के साथ पेजिंग, दोनों पर लागू होती है. PagingDataAdapter
औरAsyncPagingDataDiffer
के लिए कन्स्ट्रक्टर जोड़े गए हैं, जोCoroutineDispatcher
के बजायCoroutineContext
स्वीकार करते हैं.- नया
PagingSourceFactory
फ़ंक्शनल इंटरफ़ेस जोड़ा गया है. यह पिछले () ->PagingSource
लेम्ब्डा की तुलना में, एपीआई का ज़्यादा बेहतर इंटरफ़ेस उपलब्ध कराता है. इस फ़ैक्ट्री का इस्तेमाल, पेजर को इंस्टैंशिएट करने के लिए किया जा सकता है.
वर्शन 3.2.0-rc01
21 जून, 2023
androidx.paging:paging-*:3.2.0-rc01
रिलीज़ हो गया है. 3.2.0-rc01 वर्शन में ये बदलाव शामिल हैं.
बाहरी योगदान
वर्शन 3.2.0-beta01
7 जून, 2023
androidx.paging:paging-*:3.2.0-beta01
रिलीज़ हो गया है. 3.2.0-beta01 वर्शन में ये बदलाव शामिल हैं.
पेजिंग कंपोज
- पेजिंग कंपोज़, एपीआई के लिए आधिकारिक तौर पर स्थिर हो गया है. इसलिए, वर्शन को
1.0.0-alpha20
से अपडेट कर दिया गया है, ताकि यह अन्य सभी पेजिंग आर्टफ़ैक्ट के वर्शन से मेल खा सके.
एपीआई में हुए बदलाव
- पेजिंग कंपोज़ से, इस्तेमाल नहीं किए जा सकने वाले
items(LazyPagingItems)
औरitemsIndexed(LazyPagingItems)
एपीआई हटा दिए गए हैं. इन एपीआई की जगह इस्तेमाल किए जाने वाले एपीआई के उदाहरण के लिए, पेजिंग कंपोज1.0.0-alpha20
के रिलीज़ नोट देखें. (I9626e)
वर्शन 3.2.0-alpha06
24 मई, 2023
androidx.paging:paging-*:3.2.0-alpha06
रिलीज़ हो गया है. 3.2.0-alpha06 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- नया
PagingSourceFactory
फ़ंक्शनल इंटरफ़ेस जोड़ा गया है. यह मौजूदा() -> PagingSource
lambdas की तुलना में, ज़्यादा साफ़ तौर पर एपीआई का इस्तेमाल करने की सुविधा देता है. इस फ़ैक्ट्री का इस्तेमाल,Pager
को इंस्टैंशिएट करने के लिए किया जा सकता है. (I33165, b/280655188) List<Value>.asPagingSourceFactory()
का नयाpaging-testing
एपीआई जोड़ा गया है, ताकि ऐसाPagingSourceFactory
मिल सके जो सिर्फ़ डेटा की बदलाव न की जा सकने वाली सूची से लोड होता हो.Flow<List<Value>>
के मौजूदा एक्सटेंशन का इस्तेमाल, अब भी स्टैटिक डेटा की कई जनरेशन के साथ टेस्टिंग के लिए किया जाना चाहिए. (Id34d1, b/280655188)
एपीआई में हुए बदलाव
- पेजिंग-टेस्टिंग में मौजूद सभी सार्वजनिक एपीआई को अब
@VisibleForTesting
के साथ एनोटेट किया गया है. इससे यह पक्का किया जा सकेगा कि इन एपीआई का इस्तेमाल सिर्फ़ टेस्ट में किया जाए. (I7db6e) asSnapshot
एपीआई में अबCoroutineScope
को पास करने की ज़रूरत नहीं है. अब यह अपने पैरंट स्कोप से इनहेरिट किए गए कॉन्टेक्स्ट का इस्तेमाल डिफ़ॉल्ट रूप से करता है. (Id0a78, b/282240990)TestPager
कंस्ट्रक्टर पैरामीटर को क्रम से लगाया गया, ताकि वेPager
कंस्ट्रक्टर पैरामीटर के क्रम से मेल खा सकें (I6185a)- माइग्रेट की गई पेजिंग-टेस्टिंग में,
PagingSourceFactory<Key, Value>
टाइप के लिए लैम्ब्डा टाइप() -> PagingSource<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
का पेजिंग टेस्टिंग एपीआई, अब अपनेloadOperations
पैरामीटर को डिफ़ॉल्ट रूप से खाली लैम्ब्डा पर सेट करता है. इससे, शुरुआती रीफ़्रेश लोड से डेटा वापस पाने के लिए, किसी भी लोड ऑपरेशन को पास किए बिनाasSnapshot
को कॉल किया जा सकता है. (Ied354, b/277233770)
दस्तावेज़ से जुड़े सुधार
asPagingSourceFactory()
के दस्तावेज़ को अपडेट किया गया, ताकि यह साफ़ तौर पर बताया जा सके कि यहFlow
का एक्सटेंशन तरीका है. यहPagingSource
इंस्टेंस जनरेट करने के लिए, फिर से इस्तेमाल की जा सकने वाली फ़ैक्ट्री दिखाता है. (I5ff4f, I705b5)LoadResult.Page
कंस्ट्रक्टर के दस्तावेज़ को अपडेट किया गया, ताकि यह साफ़ तौर पर बताया जा सके कि जंपिंग की सुविधा के साथ काम करने के लिए,itemsBefore
औरitemsAfter
को बदलने की ज़रूरत है. (Ied354)
बाहरी योगदान
- Android/JVM से पेजिंग को हटाने में योगदान देने के लिए, Veyndan को धन्यवाद. (#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
बनाया जा सके और उसे पेजर को भेजा जा सके. फ़्लो से उत्सर्जित हरList<Value>>
, पेज किए गए डेटा की जनरेशन को दिखाता है. इससे,PagingData
ट्रांसफ़ॉर्मेशन पर पेजिंग टेस्ट करने में मदद मिलती है. इसके लिए, पेजर के लिए डेटा सोर्स को फ़ेक किया जाता है, ताकि वह डेटा इकट्ठा कर सके. (I6f230, b/235528239)paging-testing
आर्टफ़ैक्ट को नए एपीआई के साथ बड़ा किया गया है. इन एपीआई का इस्तेमाल,Flow<PagingData<T>>
में मौजूद डेटा के सही होने की पुष्टि करने के लिए किया जाता है. उदाहरण के लिए, इसका इस्तेमाल अपनी ViewModel लेयर सेFlow<PagingData<T>>
के आउटपुट की पुष्टि करने के लिए किया जा सकता है.ऐसा
asSnapshot
परFlow<PagingData<Value>>
के 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
. यह आर्टफ़ैक्ट, आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग और पेजिंग के साथ उसके इंटिग्रेशन के लिए डिज़ाइन किए गए एपीआई उपलब्ध कराता है.
उदाहरण के लिए, इस पहली रिलीज़ में एक TestPager
क्लास शामिल है. इसकी मदद से, PagingSource
और असल यूज़र इंटरफ़ेस (यूआई) से अलग, अपने कस्टम PagingSource
के काम करने के तरीके की पुष्टि की जा सकती है. आम तौर पर, आपको पेजिंग के एंड-टू-एंड इंटिग्रेशन को सिम्युलेट करने के लिए, असल यूज़र इंटरफ़ेस (यूआई) की ज़रूरत होती है.Pager
TestPager
को नकली माना जाना चाहिए - एक टेस्ट डबल, जो Pager
के असल तरीके को दिखाता है. साथ ही, PagingSource
की जांच के लिए आसान एपीआई प्लैटफ़ॉर्म उपलब्ध कराता है. ये एपीआई, suspend
एपीआई हैं. इन्हें runTest
के अंदर चलाया जाना चाहिए, जैसा कि Android पर Kotlin कोरुटिन की जांच करने के लिए गाइड में बताया गया है.
इस्तेमाल किए जा रहे इन एपीआई का उदाहरण, 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-runtime:3.1.1
या उससे पहले के वर्शन के साथpaging-common:3.2.0-alpha01
का इस्तेमाल करते समय,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
पर अब कोई असर नहीं पड़ेगा.LoadStates
को पूरी तरह से टर्मिनल (यानी,sourceLoadStates
remoteLoadStates
NotLoading(endOfPaginationReached = false)
) का इस्तेमाल किया जा सकता है. साथ ही, ज़रूरत पड़ने पर रिमोट स्टेट को भी शामिल किया जा सकता है. अगरLoadStates
पास नहीं किए जाते हैं, तो प्रज़ेंटर को स्टैटिकPagingData
मिलने पर, पिछलेCombinedLoadStates
को बनाए रखा जाएगा. (Ic3ce5, b/205344028)
गड़बड़ियां ठीक की गईं
PagingSource.getRefreshKey()
के नतीजे को अबinitialKey
के मुकाबले सही प्राथमिकता दी गई है. ऐसा उन मामलों में किया जाता है जहांPagingSource.getRefreshKey()
शून्य दिखाता है, लेकिनinitialKey
को शून्य के अलावा कोई वैल्यू दी गई है. (Ic9542, b/230391606)
बाहरी योगदान
- test-coroutines-lib माइग्रेशन (I3366d) की वजह से, :compose:ui:ui-test api (updateApi) को अपडेट किया गया
वर्शन 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
अब हमेशाPagingSource
औरRemoteMediator
, दोनों के लिएLoadType.REFRESH
के लिएfalse
है- पेजिंग से
LoadStates
, अब डाउनस्ट्रीम को भेजने से पहले,PagingSource
औरRemoteMediator
, दोनों से मान्य वैल्यू का इंतज़ार करता है.PagingData
की नई जनरेशन, रीफ़्रेश स्टेटस के लिए अब हमेशाLoading
से शुरू होंगी. ऐसा इसलिए, क्योंकि कुछ मामलों मेंNotLoading
पर गलत तरीके से रीसेट होने की समस्या आती थी. - प्रज़ेंटर एपीआई पर
.loadStateFlow
और.addLoadStateListener
, अब शुरुआतीCombinedLoadStates
को बार-बार नहीं भेजते. इसCombinedLoadStates
में हमेशा मीडिएटर की स्थितिnull
पर सेट होती है
- पुरानी पीढ़ियों के लिए, रद्द करने की प्रोसेस अब अमान्य होने / नई पीढ़ियों के आने पर तुरंत शुरू हो जाती है. अब
Flow<PagingData>
पर.collectLatest
का इस्तेमाल करने की ज़रूरत नहीं है. हालांकि, ऐसा करने का सुझाव अब भी दिया जाता है. PagingSource.LoadResult.Invalid
कोPagingSource.load
से, रिटर्न टाइप के तौर पर जोड़ा गया है. इस वजह से, पेजिंग इसPagingSource
के लिए, किसी भी लंबित या आने वाले समय में लोड करने के अनुरोधों को खारिज कर देती है और उसे अमान्य कर देती है. रिटर्न टाइप को इस तरह से डिज़ाइन किया गया है कि वह डेटाबेस या नेटवर्क से मिलने वाले संभावित रूप से अमान्य या पुराने डेटा को मैनेज कर सके..onPagesPresented
और.addOnPagesUpdatedListener
प्रज़ेंटर एपीआई जोड़े गए हैं. ये यूज़र इंटरफ़ेस (यूआई) में पेजों के दिखने के साथ-साथ ट्रिगर होते हैं. पेज के अपडेट इन स्थितियों में हो सकते हैं:- PagingData की नई जनरेशन का शुरुआती लोड पूरा हो जाता है. भले ही, नई जनरेशन में दिखाए गए आइटम में कोई बदलाव हो. जैसे, अगर सूची में कोई बदलाव नहीं हुआ है, तो नई जनरेशन के शुरुआती लोड के दौरान भी यह कॉलबैक ट्रिगर होगा.
- पेज तब भी डाला जाता है, जब उसमें कोई नया आइटम न हो.
- किसी पेज को हटाने पर, वह पेज खाली होने पर भी हट जाता है.
वर्शन 3.1.0-rc01
3 नवंबर, 2021
androidx.paging:paging-*:3.1.0-rc01
रिलीज़ हो गया है. 3.1.0-rc01 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- .cachedIn() में रेस कंडीशन और मेमोरी लीक की समस्या को ठीक किया गया. ऐसा उन मामलों में किया गया है जहां कोई ऑब्ज़र्वर न होने पर या किसी ऑब्ज़र्वर के नए PagingData पर स्विच करने के दौरान, पेजिंग डाउनस्ट्रीम से कई लोड इवेंट भेजे गए थे. (Ib682e)
वर्शन 3.1.0-beta01
13 अक्टूबर, 2021
androidx.paging:paging-*:3.1.0-beta01
रिलीज़ हो गया है. 3.1.0-beta01 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- एक ही आइटम को बार-बार ऐक्सेस करने पर, prefetchDistance में उसे शामिल नहीं किया जा सकता था. इस वजह से, पेज लोड होने में देरी होती थी. इस समस्या को ठीक कर दिया गया है. यह समस्या तब ज़्यादा होती है, जब कई आइटम एक साथ इस क्रम में दिखाए जाते हैं कि वे उपयोगकर्ता के स्क्रोल करने की दिशा के हिसाब से लोड न हों. आइटम के ऐक्सेस को अब बफ़र किया जाता है और उन्हें सिंक करके प्राथमिकता दी जाती है, ताकि वे ड्रॉप न हों. (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
अब हमेशाLoadType.REFRESH
के लिएfalse
होता है. पहले, RemoteMediatorREFRESH
के लिए, endOfPaginationReached की वैल्यूtrue
हो सकती थी, लेकिन PagingSource के लिए नहीं. इस व्यवहार को अब हमेशाfalse
दिखाने के लिए एक साथ जोड़ दिया गया है, क्योंकि REFRESH को टर्मिनल के तौर पर इस्तेमाल करना कभी भी सही नहीं होता. साथ ही, इसे अब LoadStates में एपीआई कॉन्ट्रैक्ट के हिस्से के तौर पर दस्तावेज़ में दर्ज किया गया है. पेजेशन की सुविधा बंद करने का फ़ैसला लेते समय, आपको हमेशा APPEND या PREPEND निर्देशों के हिसाब से ऐसा करना चाहिए. (I047b6) पेजिंग से मिली LoadStates, अब जनरेशन के बीच डाउनस्ट्रीम को उत्सर्जित करने से पहले, PagingSource और RemoteMediator, दोनों से मान्य वैल्यू का इंतज़ार करती हैं. इससे, PagingData की नई पीढ़ियों को, पहले से Loading होने पर, CombinedLoadStates.source.refresh में NotLoading भेजने से रोका जाता है. PagingData की नई पीढ़ियां, अब हमेशा रीफ़्रेश स्टेटस के लिए Loading से सही तरीके से शुरू होंगी. ऐसा इसलिए, क्योंकि कुछ मामलों में पहले गलत तरीके से NotLoading पर रीसेट किया जाता है.
पुरानी पीढ़ियों के लिए, रद्द करने की प्रोसेस अब अमान्य होने / नई पीढ़ियों के लिए तुरंत शुरू हो जाती है. अब
Flow<PagingData>
पर .collectLatest का इस्तेमाल करने की ज़रूरत नहीं है. हालांकि, ऐसा करने का सुझाव अब भी दिया जाता है. (I0b2b5, b/177351336, b/195028524)प्रज़ेंटर एपीआई पर
.loadStateFlow
और.addLoadStateListener
, अब शुरुआतीCombinedLoadStates
को बार-बार नहीं भेजते. इसमें हमेशा मध्यस्थ की स्थितियांnull
और सोर्स की स्थितियांNotLoading(endOfPaginationReached = false)
पर सेट होती हैं. इसका मतलब है कि:- RemoteMediator का इस्तेमाल करने पर, मीडिएटर की स्थितियां हमेशा अपने-आप भर जाएंगी.
- अगर
PagingData
से कोईCombinedLoadStates
नहीं मिला है, तो.loadStateFlow
पर नया loadState listener या नया कलेक्टर रजिस्टर करने पर, मौजूदा वैल्यू तुरंत नहीं निकलेगी. ऐसा तब हो सकता है, जब कोई कलेक्टर या लिसनर,PagingData
सबमिट होने से पहले ही सुनना शुरू कर दे. (I1a748)
वर्शन 3.1.0-alpha03
21 जुलाई, 2021
androidx.paging:paging-*:3.1.0-alpha03
रिलीज़ हो गया है. 3.1.0-alpha03 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
PagingSource में, LoadResult का तीसरा रिटर्न टाइप LoadResult.Invalid जोड़ा गया है. जब PagingSource.load, LoadResult.Invalid दिखाता है, तो पेजिंग, लोड किए गए डेटा को खारिज कर देगी और PagingSource को अमान्य कर देगी. रिटर्न टाइप को इस तरह से डिज़ाइन किया गया है कि वह डेटाबेस या नेटवर्क से मिलने वाले संभावित रूप से अमान्य या पुराने डेटा को मैनेज कर सके.
उदाहरण के लिए, अगर डेटाबेस में डेटा लिखा जाता है, लेकिन PagingSource समय पर अमान्य नहीं होता है, तो हो सकता है कि वह अलग-अलग नतीजे दिखाए.ऐसा तब होता है, जब इसका लागू होना, उस बैकिंग डेटासेट के डेटा में बदलाव न होने पर निर्भर करता हो जिससे वह लोड होता है. उदाहरण के लिए, LIMIT OFFSET स्टाइल के डीबी लागू करने). इस स्थिति में, हमारा सुझाव है कि आप पेज लोड होने के बाद, पेज अमान्य है या नहीं, इसकी जांच करें और LoadResult.Invalid दिखाएं. ऐसा करने पर, पेजिंग इस PagingSource के लिए, किसी भी मौजूदा या आने वाले समय में किए गए लोड अनुरोधों को खारिज कर देगी और उसे अमान्य कर देगी.
डेटा दिखाने का यह तरीका, Paging2 API के साथ भी काम करता है. यह API, LivePagedList या RxPagedList का इस्तेमाल करता है. Paging2 के PagedList API के साथ PagingSource का इस्तेमाल करने पर, PagedList तुरंत अलग हो जाता है. इससे, इस PagedList पर डेटा लोड करने की कोशिशें बंद हो जाती हैं और PagingSource पर अमान्य होने की प्रोसेस शुरू हो जाती है.
LoadResult एक सील की गई क्लास है. इसका मतलब है कि यह सोर्स के साथ काम नहीं करती. जैसे, PagingSource.load के नतीजों का सीधे तौर पर इस्तेमाल करने वाले इस्तेमाल के उदाहरणों को कंपाइल करने के समय, LoadResult.Invalid को मैनेज करना होगा. उदाहरण के लिए, Kotlin के ऐसे उपयोगकर्ता जिन्होंने रिटर्न टाइप की जांच करने के लिए, exhaustive-when फ़ंक्शन का इस्तेमाल किया है उन्हें अमान्य टाइप की जांच करने के लिए, एक और जांच जोड़नी होगी. (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 listener और फ़्लो प्रज़ेंटर एपीआई जोड़े गए हैं. ये यूज़र इंटरफ़ेस (यूआई) में दिखाए गए पेजों के अपडेट होने के तुरंत बाद ट्रिगर होते हैं.
ये अपडेट, यूज़र इंटरफ़ेस (यूआई) के साथ सिंक होते हैं. इसलिए, अपडेट लागू होने के बाद स्टेटस की जांच करने के लिए, .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) से मेल न खाएं
गड़बड़ियां ठीक की गईं
- पेजिंग की वजह से, RecyclerView में कभी-कभी कोई कार्रवाई न करने वाले अलग-अलग इवेंट भेजे जाने की समस्या को ठीक किया गया है. इसकी वजह से, कुछ लिसनर जल्दी ट्रिगर हो सकते थे. (Ic507f, b/182510751)
बाहरी योगदान
- rxjava3 आर्टफ़ैक्ट (Id1ce2, b/182497591) में, अब काम न करने वाले PagedList के साथ काम करने वाले एपीआई जोड़े गए
Paging Compose का वर्शन 1.0.0
वर्शन 1.0.0-alpha20
24 मई, 2023
androidx.paging:paging-compose:1.0.0-alpha20
रिलीज़ हो गया है. 1.0.0-alpha20 वर्शन में ये बदलाव शामिल हैं.
नई सुविधाएं
- पेजिंग कंपोज़ की सुविधा अब नकली डेटा की सूची की झलक दिखाती है.इसके लिए,
PagingData.from(fakeData)
बनाकर उसPagingData
कोMutableStateFlow
में रैप करें. उदाहरण के लिए,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 वर्शन में ये बदलाव शामिल हैं.
सभी लेज़ी लेआउट के साथ काम करना
पहले, पेजिंग कंपोज़ LazyListScope
पर पसंद के मुताबिक items
और itemsIndexed
एक्सटेंशन उपलब्ध कराता था. इसका मतलब है कि LazyVerticalGrid
, HorizontalPager
जैसे दूसरे लेज़ी लेआउट या Wear और टीवी लाइब्रेरी से मिलने वाले अन्य पसंद के मुताबिक लेज़ी कॉम्पोनेंट के साथ, पेजिंग कंपोज़ का इस्तेमाल नहीं किया जा सकता था. इस रिलीज़ में, इस समस्या को ठीक करने के लिए मुख्य अपडेट किया गया है.
ज़्यादा लेज़ी लेआउट के साथ काम करने के लिए, हमें अलग लेयर पर एपीआई बनाने की ज़रूरत थी. हर लेज़ी लेआउट के लिए कस्टम items
एपीआई देने के बजाय, पेजिंग कंपोज़ अब itemKey
और itemContentType
में LazyPagingItems
पर थोड़ा कम लेवल के एक्सटेंशन तरीके उपलब्ध कराता है. ये एपीआई, LazyColumn
और LazyVerticalGrid
के लिए पहले से मौजूद स्टैंडर्ड items
एपीआई में key
और contentType
पैरामीटर लागू करने में आपकी मदद करते हैं. साथ ही, 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
के उदाहरण कुछ लाइनें लंबे हो गए हैं. हालांकि, हमें लगता है कि आने वाले समय में पेजिंग कंपोज़ का इस्तेमाल करने वाले लोगों के लिए, सभी लेज़ी लेआउट में एक जैसा होना एक अहम बात है. इसलिए, LazyListScope
के मौजूदा एक्सटेंशन अब काम नहीं करेंगे. (I0c459, I92c8f, b/276989796)
एपीआई में हुए बदलाव
- नए एपीआई पर माइग्रेट करने की प्रोसेस को आसान बनाने के लिए,
LazyListScope
परitems
औरitemsIndexed
एक्सटेंशन फ़ंक्शन अबcontentType
पैरामीटर के साथ काम करते हैं. यह पैरामीटर, नए एपीआई में मिलने वाली सहायता को दिखाता है. (Ib1918, b/255283378)
डिपेंडेंसी से जुड़े अपडेट
- पेजिंग कॉम्पोनेंट ने अपनी डिपेंडेंसी को 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 और आइटम पाने वाले फ़ंक्शन को अब निगरानी में रखा जा सकता है. इससे, LazyVerticalGrid के साथ भी इसका इस्तेमाल किया जा सकता है (Ie2446, b/171872064, b/168285687)
Compose के साथ काम करने वाले डिवाइस
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
को अपडेट किया गया है, ताकि वेLoading
सेNotLoading
पर सिर्फ़ तब ट्रांज़िशन करें, जब मीडिएटर और सोर्स, दोनों की लोड स्टेटस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
में.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
आर्टफ़ैक्ट, पेजिंग लाइब्रेरी और 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 वर्शन में ये कमिट शामिल हैं.
गड़बड़ियां ठीक की गईं
- पेजिंग की वजह से, RecyclerView में कभी-कभी कोई कार्रवाई न करने वाले अलग-अलग इवेंट भेजे जाने की समस्या को ठीक किया गया है. इसकी वजह से, कुछ लिसनर जल्दी ट्रिगर हो सकते थे. (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)
.build()
को कॉल करने पर, अलग-अलग PagedList बिल्डर (काम करने के पुराने तरीके का पाथ) अब मुख्य थ्रेड परDataSource.Factory.create()
को गलत तरीके से सिंक्रोनस तरीके से कॉल नहीं करते. (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 से खाली पेज मिलने पर,
prefetchDistance
को पूरा करने के लिए Paging को फिर से फ़ेच करने से रोका जा सकता था. इस वजह से, 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 compat wrappers का इस्तेमाल किया जा रहा है, तो अब आपको इस्तेमाल के बारे में जानकारी देने के लिए,
@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 का इस्तेमाल नहीं किया जाता है, तो रिमोट 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)
- .cachedIn() का एक ओवरलोड जोड़ा गया है, जो Java उपयोगकर्ताओं के लिए Lifecycle या CoroutineScope के बजाय ViewModel को स्वीकार करता है. (I97d81, b/175332619)
- Java कॉलर को PagingData के ट्रांसफ़ॉर्म ऑपरेशन का इस्तेमाल, एसिंक्रोनस तरीके से करने की अनुमति दें. इसके लिए, ट्रांसफ़ॉर्म ऑपरेटर के आर्ग्युमेंट में एक Executor स्वीकार करें. अब -Sync ट्रांसफ़ॉर्म ऑपरेटर से -Sync सफ़िक्स हटा दिया गया है. Kotlin कोरूटीन के उपयोगकर्ताओं को, एक्सटेंशन फ़ंक्शन को कॉल करके, इस बात की जानकारी देनी होगी कि वे कौनसा ऑपरेटर इस्तेमाल कर रहे हैं. यह फ़ंक्शन, सस्पेंड करने वाले ब्लॉक को स्वीकार करता है.
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
को अपडेट किया गया है, ताकि वेLoading
सेNotLoading
पर सिर्फ़ तब ट्रांज़िशन करें, जब मीडिएटर और सोर्स, दोनों की लोड स्टेटसNotLoading
हो. इससे यह पक्का किया जा सकेगा कि रिमोट अपडेट लागू हो गया है. (I65619) LoadParams.pageSize को हटा दिया गया है (इसे पहले ही बंद कर दिया गया था). हमारा सुझाव है कि आप अपने PagingSource में
LoadParams.loadSize
का इस्तेमाल करें.LoadParams.loadSize
हमेशाPagingConfig.pageSize
के बराबर होता है. हालांकि, शुरुआती लोड कॉल के लिए, यहPagingConfig.initialLoadSize
के बराबर होता है.अगर पेजर या PagedList का इस्तेमाल किए बिना, Paging2 DataSource की जांच की जा रही है, तो हो सकता है कि
pageSize
,PagingConfig.pageSize
से मेल न खाए. ऐसा तब हो सकता है, जबinitialLoadSize
भी सेट किया जा रहा हो. अगर यह आपके टेस्ट के लिए ज़रूरी है, तो इसके बजाय पेजर/पेज की सूची का इस्तेमाल करें. इससे, आपके डेटा सोर्स को लोड करने के तरीकों के लिए, सही पेज साइज़ अपने-आप सेट हो जाएगा. (I98ac7, b/149157296)
गड़बड़ियां ठीक की गईं
- PagingConfig.maxSize सेट करने के साथ सेपरेटर का इस्तेमाल करते समय, IllegalStateException की वजह से क्रैश होने की समस्या को ठीक किया गया. (I0ed33, b/174787528)
- एक गड़बड़ी को ठीक किया गया है. इसकी वजह से, अगर RemoteMediator सेट किया गया था, तो PREPEND / APPEND के लिए लोड स्टेटस, शुरुआती लोड के तुरंत बाद
NotLoading(endOfPaginationReached = true)
पर अपडेट नहीं होता था (I8cf5a) - एक गड़बड़ी को ठीक किया गया है .इस गड़बड़ी की वजह से, .snapshot(), .peek() वगैरह जैसे प्रज़ेंटर-साइड एपीआई, ListUpdateCallback अपडेट में पिछली (पुरानी) सूची दिखाते थे.
- एक गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, RemoteMediator के साथ इस्तेमाल करने पर, सेपरेटर ऑपरेटर हेडर या फ़ुटर नहीं जोड़ते थे
- एक गड़बड़ी को ठीक किया गया है, जिसमें RemoteMediator के लिए LoadState, NotLoading में अपडेट होने पर, वह Loading स्टेटस में अटक जाता था
- एक गड़बड़ी को ठीक किया गया है. इस गड़बड़ी की वजह से, Paging2.0 के साथ काम करने वाले एपीआई,
.asPagingSourceFactory()
की वजह से, बैकिंगDataSource
को गलत CoroutineDispatcher पर शुरू किया जा सकता था. इससे क्रैश और संभावित ANR के मामले हल हो जाते हैं. खास तौर पर, जब 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 अपडेट में सही तरीके से लागू होता है. साथ ही, यहAPPEND
औरPREPEND
को ट्रिगर होने से रोकता है. (I94a3f, b/155290248) - शुरुआती पेज के खाली होने या ज़्यादा फ़िल्टर करने की वजह से खाली सूची दिखाने पर, पेजिंग की सुविधा अब
PREPEND
याAPPEND
लोड को शुरू करने से नहीं रोकेगी. (I3e702, b/168169730) - एक समस्या को ठीक किया गया है. इस समस्या की वजह से, PagingSource की अगली जनरेशन पर
getRefreshKey
को तब कॉल नहीं किया जाता, जब डेटा अमान्य होने की घटनाएं तेज़ी से होती हैं. (I45460, b/170027530)
बाहरी योगदान
- InvalidatingPagingSourceFactory नाम की एक नई एब्स्ट्रैक्ट क्लास जोड़ी गई है. इसमें
.invalidate()
एपीआई शामिल है, जो अपने सभी PagingSources को अमान्य के तौर पर फ़ॉरवर्ड करता है. @claraf3 को धन्यवाद! (Ie71fc, b/160716447)
आम समस्याएं
- RemoteMediator b/172254056 का इस्तेमाल करने पर, हो सकता है कि .insertSeparators() ट्रांसफ़ॉर्म से मिले हेडर और फ़ुटर तुरंत न दिखें
- RemoteMediator का इस्तेमाल करने पर, रिमोट
LoadState
फ़ंक्शन रुक सकता है. ऐसा तब होता है, जबRemoteMediator.load()
b/173717820 दिखाने से पहले ही, अमान्य करने की प्रोसेस औरPagingSource.load(LoadParams.Refresh(...))
की प्रोसेस पूरी हो जाती है
वर्शन 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 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
DataSource.InvalidatedCallback
के Kotlin / Java वैरिएंट को फ़ंक्शनल इंटरफ़ेस (Kotlin 1.4 में उपलब्ध) की मदद से, Kotlin में SAM-कन्वर्ज़न चालू करके जोड़ा गया है. इससे एक गड़बड़ी भी ठीक हो जाती है. इस गड़बड़ी की वजह से,.map
या.mapByPage
से ट्रांसफ़ॉर्म करने के बाद, invalidate कॉलबैक के Kotlin वैरिएंट को कॉल नहीं किया जाता था. (I1f244, b/165313046)
गड़बड़ियां ठीक की गईं
- ViewPager के साथ पेजिंग के इंटरैक्शन को काफ़ी बेहतर बनाया गया है. खास तौर पर, पेज अमान्य होने की वजह से, पेजिंग की सुविधा अब
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 वर्शन में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- Async PagingData Guava-based ऑपरेटर अब पैरामीटर के तौर पर Executor को स्वीकार करते हैं, ताकि एक्सीक्यूशन कॉन्टेक्स्ट को कंट्रोल किया जा सके. (Id4372)
गड़बड़ियां ठीक की गईं
- रेस कंडीशन की वजह से, RemoteMediator में दिखने वाले IndexOutOfBounds अपवाद को ठीक किया गया. (I00b7f, b/165821814)
- डेटा सोर्स -> पेजिंग सोर्स कन्वर्ज़न में रेस कंडीशन को ठीक किया गया. इस वजह से, पेजिंग सोर्स, डेटा सोर्स से मिले अमान्य सिग्नल को अनदेखा कर सकता था.
- पेज फ़ेच करने के लॉजिक में एक समस्या को ठीक किया गया है. इसकी वजह से, कभी-कभी PagingDataAdapter.refresh() को कॉल किए जाने तक, PagingSource की नई जनरेशन को नहीं चुना जा सकता था
- एक समस्या को ठीक किया गया है. इसकी वजह से, RemoteMediator के साथ PagingSource में बदले गए डेटा सोर्स (जैसे, Room से जनरेट किया गया डेटा सोर्स) का इस्तेमाल करने पर, स्क्रोल-पोज़िशन कभी-कभी हट जाती थी
बाहरी योगदान
- 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 फ़्लो के साथ जोड़ा जा सकता है. उदाहरण के लिए, शुरुआती रीफ़्रेश पूरा होने से पहले या सिर्फ़ ट्रांसफ़ॉर्मेशन की जांच करने के लिए. (Id134d) - dataRefresh Flow / Listener API को बंद कर दिया गया है, क्योंकि इनका मकसद, रीफ़्रेश होने पर दिखाए गए आइटम की स्थिति को दिखाना था. हालांकि, loadState Flow / Listener कॉलबैक के समय और 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)
- ओरिजनल और Kotlin वैरिएंट के बीच मौजूद असमंजस को हल करने के लिए, DataSource के Kotlin मैप फ़ंक्शन के वैरिएंट को Java से छिपाया गया. (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)
- एक पेज को ड्रॉप करने के बाद, आइटम ऐक्सेस करने पर पेज लोड न होने की समस्या को ठीक किया गया. हालांकि, आइटम ऐक्सेस करने की समयावधि, prefetchDistance के अंदर थी (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
isEmpty()
औरfirstItemOrNull()
जैसे सामान्य आइटम के ऐक्सेस के लिए, PagingState में सहायक जोड़े गए (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 वर्शन में ये बदलाव शामिल हैं.
पेजिंग लाइब्रेरी को 3.0 पर अपडेट किया गया है, ताकि कई नई सुविधाएं चालू की जा सकें.
3.0 वर्शन की नई सुविधाएं
- Kotlin कोरुटिन और फ़्लो के लिए बेहतरीन सहायता.
- कोरूटीन सस्पेंड फ़ंक्शन, RxJava Single या Guava ListenableFuture प्राइमिटिव की मदद से, एसिंक्रोनस तरीके से लोड करने की सुविधा.
- रिस्पॉन्सिव यूज़र इंटरफ़ेस (यूआई) डिज़ाइन के लिए, लोड स्टेटस और गड़बड़ी के सिग्नल पहले से मौजूद हैं. इनमें फिर से कोशिश करने और रीफ़्रेश करने की सुविधा भी शामिल है.
- रिपॉज़िटरी लेयर में सुधार
- डेटा सोर्स का आसान इंटरफ़ेस
- आसान नेटवर्क + डेटाबेस पेजेशन
- सदस्यता रद्द करने से जुड़ी सहायता
- प्रज़ेंटेशन लेयर में किए गए सुधार
आम समस्याएं
- फ़िलहाल, पेजिंग 3 के लिए javadocs उपलब्ध नहीं हैं. इस दौरान, कृपया ऊपर दिए गए लिंक या 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 वर्शन में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- प्लेसहोल्डर बंद होने पर, PositionalDataSources से लगातार होने वाले शुरुआती लोड अब पिछली बार ऐक्सेस किए जाने के समय के आस-पास होते हैं
वर्शन 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()
जोड़ा गया. PagedList.Config.Builder
के लिए Kotlin के विकल्प के तौर परandroidx.paging.Config()
जोड़ा गयाPagedList.Builder
के लिए Kotlin के विकल्प के तौर परandroidx.paging.PagedList()
जोड़ा गयाLivePagedListBuilder
के लिए Kotlin के विकल्प के तौर परDataSourceFactory.toLiveData()
जोड़ा गया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 से पहले की डिपेंडेंसी
Paging के AndroidX से पहले के वर्शन के लिए, ये डिपेंडेंसी शामिल करें:
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
का इस्तेमाल करें, ताकि आपका ऐप्लिकेशन बिना किसी रुकावट के काम करता रहे. पेजिंग RxJava2 1.0.1
भी रिलीज़ कर दिया गया है. यह 1.0.0-rc1
जैसा ही है.
गड़बड़ियां ठीक की गईं
PagedListAdapter
औरAsyncPagedListDiffer
के ट्रिगर होने पर, मूव इवेंट सिग्नल न भेजने की समस्या को ठीक किया गया है. b/110711937
RxJava2 का वर्शन 1.0.0
RxJava2 वर्शन 1.0.0-rc1
16 मई, 2018
पेजिंग RxJava2 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
के लिए, एपीआई में कोई और बदलाव नहीं करने जा रहे हैं. साथ ही, एपीआई में किसी भी तरह का बदलाव करना बहुत मुश्किल है.
पेजिंग के लिए, 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();
नई सुविधाएं
RxPagedListBuilder
को नएandroid.arch.paging:rxjava2
आर्टफ़ैक्ट के ज़रिए जोड़ा गया है.
एपीआई में हुए बदलाव
एपीआई में किए गए बदलाव, ताकि बिल्डर में एक्ज़ीक्यूटर की भूमिका को साफ़ तौर पर बताया जा सके:
PagedList.Builder
औरLivePagedListBuilder
में,setBackgroundThreadExecutor()
का नाम बदलकरsetFetchExecutor()
किया गयाPagedList.Builder
मेंsetMainThreadExecutor()
का नाम बदलकरsetNotifyExecutor()
किया गया.
PagedList.mCallbacks
सदस्य को निजी के तौर पर सेट किया गया.
गड़बड़ियां ठीक की गईं
LivePagedListBuilder
, Arch Components IO थ्रेड पूल के बजाय, तय किए गए एक्ज़ीक्यूटर पर शुरुआतीPagedList
लोड को ट्रिगर करता है.इंटरनल
DataSource
रैपर में, अमान्य होने की समस्या को ठीक किया गया. इन रैपर का इस्तेमाल,DataSource.map
को लागू करने के साथ-साथ प्लेसहोल्डर बंद करकेPositionalDataSource
को लोड करने के लिए किया जाता है b/77237534
वर्शन 1.0.0-alpha7
21 मार्च, 2018
पेजिंग 1.0.0-alpha7
को लाइफ़साइकल 1.1.1
के साथ रिलीज़ किया गया है. पेजिंग 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-side फ़िक्स का अनुमान)
- Javadoc के सैंपल कोड से, b/70411933, b/71467637 को ठीक किया गया