पृष्ठांकन
इस टेबल में, androidx.paging ग्रुप के सभी आर्टफ़ैक्ट की सूची दी गई है.
| सह-प्रॉडक्ट | स्टेबल रिलीज़ | रिलीज़ कैंडिडेट | बीटा रिलीज़ | ऐल्फ़ा रिलीज़ |
|---|---|---|---|---|
| पेजिंग-* | 3.3.6 | 3.4.0-rc01 | - | - |
| paging-compose | 3.3.6 | 3.4.0-rc01 | - | - |
डिपेंडेंसी का एलान करना
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-rc01" }
Kotlin
dependencies { val paging_version = "3.3.6" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-rc01") }
Kotlin एक्सटेंशन इस्तेमाल करने के बारे में जानकारी पाने के लिए, ktx दस्तावेज़ देखें.
डिपेंडेंसी के बारे में ज़्यादा जानने के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.
सुझाव/राय दें या शिकायत करें
आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या आपके पास इस लाइब्रेरी को बेहतर बनाने के लिए सुझाव हैं, तो हमें बताएं. कृपया नई समस्या सबमिट करने से पहले, इस लाइब्रेरी में शामिल मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.
ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.
वर्शन 3.4
वर्शन 3.4.0-rc01
14 जनवरी, 2026
androidx.paging:paging-*:3.4.0-rc01 रिलीज़ हो गया है. वर्शन 3.4.0-rc01 में ये बदलाव शामिल हैं.
नई सुविधाएं
- Jetbrains के macosX64 टारगेट को बंद करने के फ़ैसले के साथ तालमेल बिठाने के लिए, इन केएमपी प्लैटफ़ॉर्म के लिए सहायता हटा दी गई है:
macosX64,iosX64,watchosX64, औरtvosX64. (7cb9a4)
वर्शन 3.4.0-beta01
17 दिसंबर, 2025
androidx.paging:paging-*:3.4.0-beta01 रिलीज़ हो गया है. वर्शन 3.4.0-beta01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
RecyclerViewऔरRefreshके बीच रेस की समस्या ठीक की गई है. इससेRecyclerViewमेंIndexOutOfBoundsExceptionलोड हो रहा था.Refreshके लगातार लोड होने की वजह से, यूज़र इंटरफ़ेस (यूआई) अपडेट में रुकावट आ सकती है. इससे पेजिंग की स्थिति,RecyclerViewके साथ सिंक नहीं हो पाती. अगर रीफ़्रेश में रुकावट आती है (जैसे, लगातारRefreshलोड होने की वजह से), तो पेजिंग को रीफ़्रेश से पहले की स्थिति पर रीसेट करके इस समस्या को ठीक किया जाता है. (I771b0, b/409809768)
वर्शन 3.4.0-alpha04
10 सितंबर, 2025
androidx.paging:paging-*:3.4.0-alpha04 रिलीज़ हो गया है. वर्शन 3.4.0-alpha04 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- लोड किए गए आइटम को टारगेट पोज़िशन के सबसे करीब लाने और इनपुट प्रेडिकेट से मैच करने के लिए, नया
PagingStateएपीआईclosestItemAroundPositionजोड़ा गया है. इसका इस्तेमाल, आइटम के हिसाब से रीफ़्रेश कुंजियां जनरेट करने के लिए किया जा सकता है. इसमें ऐंकर किए जा सकने वाले आइटम, टारगेट की गई सटीक जगह पर नहीं होते, लेकिन उसके आस-पास होते हैं. (I96e5c, b/440187139)
वर्शन 3.4.0-alpha03
27 अगस्त, 2025
androidx.paging:paging-*:3.4.0-alpha03 रिलीज़ हो गया है. वर्शन 3.4.0-alpha03 में ये बदलाव शामिल हैं.
नई सुविधाएं
- Paging-common ने डेस्कटॉप को नए Kotlin Multiplatform (केएमपी) टारगेट के तौर पर जोड़ा है. अब यह इन प्लैटफ़ॉर्म पर काम करता है: जेवीएम(Android और डेस्कटॉप), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW), और Web (JavaScript, WasmJS). (Id2483, b/436884811)
- Paging-testing में नए Kotlin Multiplatform (केएमपी) टारगेट जोड़े गए हैं. अब यह इन प्लैटफ़ॉर्म पर काम करता है: जेवीएम(Android और डेस्कटॉप), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW), और Web (JavaScript, WasmJS). (I0c543, b/435014650)
- Paging-compose में नए Kotlin Multiplatform (केएमपी) टारगेट जोड़े गए हैं. अब यह इन प्लैटफ़ॉर्म पर काम करता है: जेवीएम(Android और डेस्कटॉप), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW), और Web (JavaScript, WasmJS). (I70d44, b/436884801)
एपीआई में हुए बदलाव
- डिफ़ॉल्ट minSdk को API 21 से API 23 पर ले जाना (Ibdfca, b/380448311, b/435705964, b/435705223)
वर्शन 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 ने ये केएमपी टारगेट जोड़े हैं: watchos, tvos, mingwX64, watchosDeviceArm64, और linuxArm64. (I237dd, Ia62b3, b/368046982, Icf15d, b/364652024, I139d3, b/338268719)
गड़बड़ियां ठीक की गईं
- Paging 3.3 या इसके बाद के वर्शन का इस्तेमाल करने वाली Android यूनिट टेस्ट अब
PagingLoggerसे थ्रो नहीं करेंगी (Ia9400, b/331684448) - उस गड़बड़ी को ठीक किया गया है जिसमें उपयोगकर्ता के स्क्रोल करने के दौरान
RecyclerViewको अपडेट करते समय,RecyclerViewथ्रो करता है (Id1f16, b/381024738)IndexOutOfBoundsException - उस गड़बड़ी को ठीक किया गया है जिसमें स्क्रोल करते समय रीफ़्रेश करने पर, पेजिंग की सुविधा ज़्यादा लोड को ट्रिगर नहीं कर पाती थी. (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को अपडेट करते समय स्क्रोल करने पर,RecyclerViewIndexOutOfBoundsExceptionदिखाता है. (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या गड़बड़ी की स्थिति में नहीं आ जाता.PagingData.empty()अब डिफ़ॉल्ट रूप सेNotLoadingकी स्थितियां भेजता है. हालांकि, ऐसा तब तक होता है, जब तक कस्टमLoadStatesको इसके कंस्ट्रक्टर में पास नहीं किया जाता. यह मौजूदा व्यवहार से अलग है. इसमेंPagingDataAdapterको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 Multiplatform के साथ काम करने की सुविधा जोड़ने से जुड़े दस्तावेज़ में मौजूद मामूली गड़बड़ियों को ठीक किया गया है. (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औरCombinedLoadStatesहेल्पर तरीके जोड़े गए.NotLoadingएक नया एपीआई भी जोड़ा गया है, जोLoadStateFlowपर तब तक इंतज़ार करता है, जब तक कि लोडNotLoadingया गड़बड़ी की स्थिति में न आ जाए. (Id6c67)
व्यवहार में बदलाव
PagingData.empty()अब डिफ़ॉल्ट रूप सेNotLoadingकी स्थितियां भेजता है. हालांकि, ऐसा तब तक होता है, जब तक कस्टमLoadStatesको इसके कंस्ट्रक्टर में पास नहीं किया जाता. यह मौजूदा व्यवहार से अलग है. इसमेंPagingDataAdapterको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()के लिए रिसीवर के तौर पर पास करें, ताकि झलक देखी जा सके.PagingDataLazyVerticalGridऔर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को टेस्ट में पेजर को पास किया जा सकता है asSnapshotFlow<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 में ये बदलाव शामिल हैं.
बाहरी योगदान
- Android/JVM की खास बातों से पेजिंग को हटाने में योगदान देने के लिए, Veyndan का धन्यवाद. (#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) के क्रम से मेल खाएं- पेजिंग-टेस्टिंग के लिए, लैंबडा टाइप
() -> 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)
बाहरी योगदान
- 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तरीका शामिल है. इससे, Pager को सप्लाई किए जाने वालेFlow<List<Value>>सेpagingSourceFactoryबनाया जा सकता है. Flow से निकलने वाला हरList<Value>>, पेज किए गए डेटा के जनरेशन को दिखाता है. इससे पेजिंग टेस्ट को आसान बनाया जा सकता है. उदाहरण के लिए, Pager के लिए डेटा सोर्स को फ़र्ज़ी बनाकरPagingDataट्रांसफ़ॉर्मेशन. (I6f230, b/235528239)paging-testingआर्टफ़ैक्ट को नए एपीआई के साथ बड़ा किया गया है. ये एपीआई,Flow<PagingData<T>>में मौजूद डेटा की पुष्टि करने के लिए सही हैं. इसका इस्तेमाल, उदाहरण के लिए, ViewModel लेयर सेFlow<PagingData<T>>के आउटपुट की पुष्टि करने के लिए किया जा सकता है.ऐसा
Flow<PagingData<Value>>पर मौजूदasSnapshotKotlin एक्सटेंशन की मदद से किया जाता है. यह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 valuesasSnapshotएक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 क्लास शामिल है. इसकी मदद से, अपने कस्टम PagingSource को लागू करने के तरीके की पुष्टि की जा सकती है. इसके लिए, आपको Pager और असली यूज़र इंटरफ़ेस (यूआई) की ज़रूरत नहीं होगी. आम तौर पर, आपको एंड-टू-एंड पेजिंग इंटिग्रेशन को सिम्युलेट करने के लिए इनकी ज़रूरत होती है.
TestPager को नकली माना जाना चाहिए. यह Pager के असली वर्शन की तरह काम करने वाला टेस्ट डबल है. साथ ही, यह PagingSource की जांच करने के लिए, आसान एपीआई उपलब्ध कराता है. ये suspend एपीआई हैं और इन्हें runTest में चलाना चाहिए. इसके बारे में, Android पर Kotlin coroutines की जांच करने से जुड़ी गाइड में बताया गया है.
इन एपीआई के इस्तेमाल का उदाहरण, room-paging टेस्ट में देखा जा सकता है. इन्हें TestPager का इस्तेमाल करने के लिए फिर से बनाया गया था.
एपीआई में हुए बदलाव
- इस कुकी की मदद से,
LoadResult.Page.dataसेLoadResult.Page.iterator()तक आसानी से दोहराया जा सकता है. इससे,PagingSource.getRefreshKeyतरीके को पास किए गएPagingStateकीpagesप्रॉपर्टी जैसेList<LoadResult.Page>दिए जाने पर, Kotlin की स्टैंडर्ड लाइब्रेरी केflattenतरीके का इस्तेमाल किया जा सकता है. (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()फ़ंक्शन से null वैल्यू मिलती है, लेकिनinitialKeyफ़ंक्शन से null वैल्यू नहीं मिलती है, वहां अबPagingSource.getRefreshKey()फ़ंक्शन के नतीजे को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से नए रिटर्न टाइप के तौर पर जोड़ा गया है. इससे पेजिंग, इसPagingSourceके लिए लोड करने के किसी भी लंबित या आने वाले अनुरोध को खारिज कर देती है और उसे अमान्य कर देती है. इस रिटर्न टाइप को ऐसे डेटा को हैंडल करने के लिए डिज़ाइन किया गया है जो अमान्य या पुराना हो सकता है. यह डेटा, डेटाबेस या नेटवर्क से वापस मिल सकता है..onPagesPresentedऔर.addOnPagesUpdatedListenerप्रज़ेंटर एपीआई जोड़े गए. ये एपीआई, यूज़र इंटरफ़ेस (यूआई) में पेज दिखाए जाने पर सिंक्रोनस तरीके से ट्रिगर होते हैं. पेज के अपडेट इन स्थितियों में हो सकते हैं:- PagingData की नई जनरेशन का शुरुआती लोड पूरा हो जाता है. भले ही, नई जनरेशन में दिखाए गए आइटम में कोई बदलाव हुआ हो या नहीं. जैसे, अगर नई जनरेशन में, सूची में कोई बदलाव नहीं किया गया है, तो भी यह कॉलबैक ट्रिगर होगा.
- पेज को शामिल किया जाता है, भले ही शामिल किए गए पेज में कोई नया आइटम न हो.
- पेज को हटा दिया जाता है, भले ही वह खाली हो.
वर्शन 3.1.0-rc01
3 नवंबर, 2021
androidx.paging:paging-*:3.1.0-rc01 रिलीज़ हो गया है. वर्शन 3.1.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- Paging लाइब्रेरी के डाउनस्ट्रीम से कई लोड इवेंट भेजे जाने पर, .cachedIn() में रेस कंडीशन और मेमोरी लीक की समस्या ठीक की गई है. ऐसा तब होता है, जब कोई ऑब्ज़र्वर मौजूद नहीं होता या जब कोई ऑब्ज़र्वर नए 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अब हमेशाfalseLoadType.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) के साथ टकराव न करें
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें पेजिंग लाइब्रेरी, कभी-कभी RecyclerView को no-op differ इवेंट भेजती थी. इससे कुछ लिसनर पहले ही ट्रिगर हो सकते थे. (Ic507f, b/182510751)
बाहरी योगदान
- rxjava3 आर्टफ़ैक्ट में, बंद किए गए PagedList के साथ काम करने वाले एपीआई जोड़े गए (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में रैप करें. उदाहरण के लिए,PagingDataMutableStateFlow(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से कनेक्ट करने के लिए किया जाता है. अब ये दोनों, option key param को स्वीकार करते हैं. इससे आपको आइटम को दिखाने वाली स्टेबल कुंजी तय करने की सुविधा मिलती है. कुंजियों के बारे में ज़्यादा जानने के लिए, यहां जाएं. (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में.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 API का इस्तेमाल किया जा सकता है. इससे ये सुधार किए जा सकते हैं:
- Kotlin को-रूटीन और फ़्लो के लिए बेहतर सपोर्ट
- सदस्यता रद्द करने से जुड़ी सहायता
- लोडिंग की स्थिति और गड़बड़ी के बिल्ट-इन सिग्नल
- फिर से कोशिश करें + रीफ़्रेश करने की सुविधा
- DataSource की तीनों सबक्लास को एक ही PagingSource क्लास में जोड़ दिया गया है
- पेज में पसंद के मुताबिक बदलाव करने की सुविधा. इसमें सेपरेटर जोड़ने के लिए, पहले से मौजूद सुविधा भी शामिल है
- हेडर और फ़ुटर लोड हो रहे हैं
वर्शन 3.0.0-rc01
21 अप्रैल, 2021
androidx.paging:paging-*:3.0.0-rc01 रिलीज़ हो गया है. वर्शन 3.0.0-rc01 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- उस समस्या को ठीक किया गया है जिसमें पेजिंग लाइब्रेरी, कभी-कभी 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
DataSourceAPI का इस्तेमाल करते समय, कभी-कभी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- सिर्फ़ PagingSource के endOfPaginationReached को मार्क करने का इंतज़ार करें, भले ही RemoteMediator का इस्तेमाल किया गया हो. इससे हेडर और फ़ुटर, शुरुआती लोड के साथ सिंक्रोनस तरीके से दिखाए जा सकते हैं. इससे उपयोगकर्ताओं को टर्मिनल सेपरेटर देखने के लिए स्क्रोल नहीं करना पड़ता. (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 को बदलने वाले सभी ऑपरेटर को, static 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 अपडेट में पुरानी (आउट-ऑफ़-डेट) सूची दिखाते थे.
- उस बग को ठीक किया गया है जिसकी वजह से, RemoteMediator के साथ इस्तेमाल किए जाने पर, सेपरेटर ऑपरेटर हेडर या फ़ुटर नहीं जोड़ते थे
- उस गड़बड़ी को ठीक किया गया है जिसमें RemoteMediator के लिए LoadState, NotLoading पर अपडेट होने के बजाय Loading पर अटक जाता था
- उस गड़बड़ी को ठीक किया गया है जिसमें Paging2.0 के साथ काम करने वाला एपीआई,
.asPagingSourceFactory(), गलत CoroutineDispatcher परDataSourceको शुरू कर सकता था. इससे क्रैश होने और एएनआर (ऐप्लिकेशन का जवाब न देना) की संभावित समस्याओं को हल किया जा सकता है. ऐसा खास तौर पर तब होता है, जब 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()एपीआई है, जो इससे जुड़े सभी PagingSource को अमान्य करने का अनुरोध भेजता है. @claraf3 को धन्यवाद! (Ie71fc, b/160716447)
मौजूदा समस्याएं
- RemoteMediator b/172254056 का इस्तेमाल करते समय, ऐसा हो सकता है कि .insertSeparators() ट्रांसफ़ॉर्म से मिले हेडर और फ़ुटर तुरंत न दिखें
- 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 में ये बदलाव शामिल हैं.
एपीआई में हुए बदलाव
- dataRefreshFlow / Listener के तरीकों को पूरी तरह से बंद कर दिया गया है. साथ ही, replaceWith क्लॉज़ का इस्तेमाल किया गया है. (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 से अमान्य होने के सिग्नल को अनदेखा कर सकता है.
- पेज फ़ेच करने के लॉजिक में मौजूद उस समस्या को ठीक कर दिया गया है जिसकी वजह से, कभी-कभी PagingDataAdapter.refresh() को कॉल किए जाने तक, PagingSource की नई जनरेशन को पिक अप नहीं किया जा सकता था
- उस समस्या को ठीक किया गया है जिसकी वजह से, RemoteMediator के साथ PagingSource में बदले गए DataSource (जैसे कि 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 के पूरे फ़्लो के साथ जोड़ा जा सकता है, ताकि कुछ स्थितियों में स्टैटिक सूचियां दिखाई जा सकें. उदाहरण के लिए, शुरुआती REFRESH पूरा होने से पहले या सिर्फ़ ट्रांसफ़ॉर्मेशन की जांच करने के लिए. (Id134d) - dataRefresh Flow / Listener APIs को बंद कर दिया गया है. इनका इस्तेमाल REFRESH पर दिखाए गए आइटम की स्थिति को दिखाने के लिए किया जाता था. हालांकि, loadState Flow / Listener callback timing और itemCount प्रॉपर्टी में सुधार किए जाने के बाद, इनकी ज़रूरत नहीं है (Ia19f3)
PagingSourceऔरRemoteMediatorके लिए, RxJava3 के साथ काम करने वाले रैपर जोड़े गए (I49ef3, b/161480176)
गड़बड़ियां ठीक की गईं
toPagingSourceFactoryहेल्पर के ज़रिएPositionalDataSourceमें बदले गएPagingSource, अब जंप करने की सुविधा के साथ काम करते हैं. इनमें 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 functions, RxJava Single या Guava ListenableFuture primitives के साथ एसिंक लोडिंग की सुविधा.
- रिस्पॉन्सिव यूज़र इंटरफ़ेस (यूआई) डिज़ाइन के लिए, पहले से मौजूद लोड स्टेट और गड़बड़ी के सिग्नल. इनमें फिर से कोशिश करने और रीफ़्रेश करने की सुविधा भी शामिल है.
- रिपॉज़िटरी लेयर में किए गए सुधार
- डेटा सोर्स का आसान इंटरफ़ेस
- नेटवर्क और डेटाबेस के पेजों को आसानी से नंबर देना
- सदस्यता रद्द करने से जुड़ी सहायता
- प्रज़ेंटेशन लेयर में किए गए सुधार
मौजूदा समस्याएं
- Paging 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 में ये बदलाव शामिल हैं.
गड़बड़ियां ठीक की गईं
- जगह की जानकारी देने वाले डेटा सोर्स से लगातार लोड होने वाले शुरुआती डेटा को अब आखिरी बार ऐक्सेस किए गए डेटा के हिसाब से दिखाया जाता है. ऐसा तब होता है, जब प्लेसहोल्डर बंद होते हैं
वर्शन 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 के दिखने पर ट्रिगर होता है. इससे, 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 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 के लिए, RxJava2 के साथ काम करने वाले वर्शन को एक अलग वैकल्पिक मॉड्यूल (android.arch.paging:rxjava2:1.0.0-alpha1) के तौर पर रिलीज़ किया गया है. यह वर्शन कुछ समय के लिए अलग से वर्शन किया जाएगा, ताकि इसे बेहतर बनाया जा सके.
यह नई लाइब्रेरी, LivePagedListBuilder के लिए RxJava2 का विकल्प उपलब्ध कराती है. यह Observables और Flowables बना सकती है. साथ ही, Executors के बजाय Schedulers का इस्तेमाल कर सकती है:
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आर्टफ़ैक्ट के ज़रिए जोड़ा गया है.
एपीआई में हुए बदलाव
बिल्डर में एक्ज़ीक्यूटर की भूमिका के बारे में ज़्यादा जानकारी देने के लिए, एपीआई में बदलाव किए गए हैं:
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 का पता लगाने के लिए अतिरिक्त लॉगिंग (और रूम-साइड फ़िक्स)
- Javadoc के सैंपल कोड से जुड़ी गड़बड़ियों को ठीक किया गया b/70411933, b/71467637