पृष्ठांकन

Paging Library की मदद से, अपने ऐप्लिकेशन के RecyclerView में डेटा को धीरे-धीरे और आसानी से लोड किया जा सकता है.

इस टेबल में, androidx.paging ग्रुप के सभी आर्टफ़ैक्ट की सूची दी गई है.

सह-प्रॉडक्ट स्टेबल रिलीज़ रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा वर्शन
paging-* 3.3.6 - - 3.4.0-alpha02
paging-compose 3.3.6 - - 3.4.0-alpha02
इस लाइब्रेरी को पिछली बार इस तारीख को अपडेट किया गया था: 30 जुलाई, 2025

डिपेंडेंसी का एलान करना

Paging पर डिपेंडेंसी जोड़ने के लिए, आपको अपने प्रोजेक्ट में Google Maven रिपॉज़िटरी जोड़नी होगी. ज़्यादा जानकारी के लिए, Google की Maven रिपॉज़िटरी पढ़ें.

अपने ऐप्लिकेशन या मॉड्यूल के लिए, build.gradle फ़ाइल में उन आर्टफ़ैक्ट की डिपेंडेंसी जोड़ें जिनकी आपको ज़रूरत है:

Groovy

dependencies {
  def paging_version = "3.3.6"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.4.0-alpha02"
}

Kotlin

dependencies {
  val paging_version = "3.3.6"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.4.0-alpha02")
}

Kotlin एक्सटेंशन इस्तेमाल करने के बारे में जानकारी पाने के लिए, ktx दस्तावेज़ देखें.

डिपेंडेंसी के बारे में ज़्यादा जानकारी के लिए, बिल्ड डिपेंडेंसी जोड़ना लेख पढ़ें.

सुझाव/राय दें या शिकायत करें

आपके सुझाव, शिकायत या राय से Jetpack को बेहतर बनाने में मदद मिलती है. अगर आपको कोई नई समस्या मिलती है या इस लाइब्रेरी को बेहतर बनाने के लिए आपके पास कोई सुझाव है, तो हमें बताएं. कृपया नई लाइब्रेरी बनाने से पहले, इस लाइब्रेरी में मौजूद मौजूदा समस्याओं को देखें. स्टार बटन पर क्लिक करके, किसी मौजूदा समस्या के लिए वोट किया जा सकता है.

नई समस्या बनाना

ज़्यादा जानकारी के लिए, Issue Tracker का दस्तावेज़ देखें.

वर्शन 3.4

वर्शन 3.4.0-alpha02

30 जुलाई, 2025

androidx.paging:paging-*:3.4.0-alpha02 रिलीज़ हो गया है. वर्शन 3.4.0-alpha02 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingData.from अब placeholdersBefore और placeholdersAfter सेट करने की अनुमति देता है. ध्यान दें कि इन प्लेसहोल्डर को स्क्रोल करने से, लोड ट्रिगर नहीं होते. (I06983)

वर्शन 3.4.0-alpha01

2 जुलाई, 2025

androidx.paging:paging-*:3.4.0-alpha01 रिलीज़ हो गया है. वर्शन 3.4.0-alpha01 में ये कमिट शामिल हैं.

नई सुविधाएं

गड़बड़ियां ठीक की गईं

  • Paging 3.3 या उसके बाद के वर्शन का इस्तेमाल करने वाली Android यूनिट टेस्ट में अब PagingLogger से गड़बड़ी नहीं दिखेगी (Ia9400, b/331684448)
  • उस गड़बड़ी को ठीक किया गया है जिसमें उपयोगकर्ता के स्क्रोल करने पर, RecyclerView अपडेट करते समय IndexOutOfBoundsException दिखता था (Id1f16, b/381024738)RecyclerView
  • उस गड़बड़ी को ठीक किया गया है जिसमें स्क्रोल करते समय रीफ़्रेश करने पर, पेजिंग की सुविधा ज़्यादा लोड को ट्रिगर नहीं कर पाती थी. (I60ca5, b/352586078)
  • पेजिंग आइटम रीफ़्रेश करते समय स्क्रोल करने पर ऐप्लिकेशन क्रैश होने की समस्या को ठीक किया गया है. (I8c65a, b/347649763)

वर्शन 3.3

वर्शन 3.3.6

12 फ़रवरी, 2025

androidx.paging:paging-*:3.3.6 रिलीज़ हो गया है. वर्शन 3.3.6 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • शुरुआती रीफ़्रेश के दौरान भेजे गए रीफ़्रेश और फिर से कोशिश करने के सिग्नल अब सेव किए जाएंगे. साथ ही, पेजिंग प्रेजेंटर तैयार होने के बाद, इन्हें अपने-आप फिर से भेजा जाएगा.

बाहरी योगदान

  • गड़बड़ी ठीक करने का सुझाव (#754) सबमिट करने के लिए, इवा को धन्यवाद

वर्शन 3.3.5

11 दिसंबर, 2024

androidx.paging:paging-*:3.3.5 रिलीज़ हो गया है. वर्शन 3.3.5 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • उस गड़बड़ी को ठीक किया गया है जिसमें उपयोगकर्ता के RecyclerView को अपडेट करते समय स्क्रोल करने पर, RecyclerView IndexOutOfBoundsException दिखाता है. (Id1f16, b/381024738)

वर्शन 3.3.4

13 नवंबर, 2024

androidx.paging:paging-*:3.3.4 रिलीज़ हो गया है. वर्शन 3.3.4 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • Android की यूनिट टेस्ट में, Paging 3.3 या उसके बाद के वर्शन का इस्तेमाल करने पर, अब Method isLoggable in android.util.Log not mocked जैसी गड़बड़ी नहीं दिखेगी. (Ia9400, b/331684448)

वर्शन 3.3.2

7 अगस्त, 2024

androidx.paging:paging-*:3.3.2 रिलीज़ हो गया है. वर्शन 3.3.2 में ये कमिट शामिल हैं.

नई सुविधाएं

  • paging-common और paging-testing ने नए Kotlin-Multiplatform टारगेट जोड़े हैं: watchos, tvos, और linuxArm64 (90c9768), (53e0eca)

वर्शन 3.3.1

24 जुलाई, 2024

androidx.paging:paging-*:3.3.1 रिलीज़ हो गया है. वर्शन 3.3.1 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • स्क्रोल करते समय बैकग्राउंड में मौजूद डेटा सोर्स रीफ़्रेश होने पर, AsyncPagingDataDiffer या इसके ऊपर बनाए गए एपीआई (जैसे, RecyclerView के साथ इस्तेमाल किया जाने वाला PagingDataAdapter) ज़्यादा लोड ट्रिगर नहीं कर पाते थे. इस समस्या को ठीक कर दिया गया है. (I60ca5, b/352586078)
  • स्क्रोल करते समय, बैकग्राउंड में मौजूद डेटा सोर्स से आइटम हटाए जाने पर होने वाली क्रैश की समस्या को ठीक किया गया है. ऐसा तब होता है, जब PagingDataAdapter या AsyncPagingDataDiffer का इस्तेमाल करके RecyclerView को स्क्रोल किया जाता है. (I8c65a, b/347649763)

वर्शन 3.3.0

14 मई, 2024

androidx.paging:paging-*:3.3.0 रिलीज़ हो गया है. वर्शन 3.3.0 में ये कमिट शामिल हैं.

3.2.0 के बाद हुए ज़रूरी बदलाव

  • PagingDataPresenter अब एक सार्वजनिक क्लास है. अब मल्टीप्लैटफ़ॉर्म प्रज़ेंटर, PagingDataPresenter के ऊपर बनाए जा सकते हैं. इसके लिए, इंटरनल पेजिंग एपीआई या paging-runtime के AsyncPagingDataDiffer की ज़रूरत नहीं होती.
  • hasError और isIdle में, LoadStates और CombinedLoadStates के लिए नए हेल्पर तरीके जोड़े गए हैं. इनसे यह पता चलेगा कि LoadStates, गड़बड़ी वाली स्थिति में है या NotLoading स्थिति में है. साथ ही, Flow<CombinedLoadStates> पर एक नया awaitNotLoading() Kotlin एक्सटेंशन मेथड जोड़ा गया है. यह तब तक इंतज़ार करता है, जब तक कि लोड NotLoading या Error स्थिति में न आ जाए.
  • PagingData.empty() अब डिफ़ॉल्ट रूप से NotLoading की स्थितियां भेजता है. हालांकि, अगर कस्टम LoadStates को इसके कंस्ट्रक्टर में पास किया जाता है, तो ऐसा नहीं होगा. यह मौजूदा व्यवहार से अलग है. इसमें PagingDataAdapter को सबमिट करने पर LoadStates को डिसपैच नहीं किया जाता है या LazyPagingItems के तौर पर इकट्ठा किए जाने पर, लोडिंग की स्थितियां डिसपैच की जाती हैं. LazyPagingItems के तौर पर इकट्ठा किए जाने पर, अब यह शुरुआती कंपोज़िशन के दौरान तुरंत एक खाली सूची भी दिखाएगा.

Kotlin Multiplatform के साथ काम करने की सुविधा

Paging अब Kotlin Multiplatform के साथ काम करने वाले आर्टफ़ैक्ट उपलब्ध कराता है. ऐसा काफ़ी हद तक, CashApp के multiplatform-paging प्रोजेक्ट की वजह से हुआ है.

  • paging-common ने सभी Paging 3 API को common पर माइग्रेट कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.
  • paging-testing ने अपना कोड common पर ट्रांसफ़र कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.
  • paging-compose ने अपना कोड common पर ट्रांसफ़र कर दिया है. साथ ही, यह androidx.compose की तरह ही, Android आर्टफ़ैक्ट को कई प्लैटफ़ॉर्म पर उपलब्ध कराता है.
  • paging-runtime, paging-guava, paging-rxjava2, और paging-rxjava3 सिर्फ़ Android पर उपलब्ध रहेंगे.

वर्शन 3.3.0-rc01

1 मई, 2024

androidx.paging:paging-*:3.3.0-rc01 को Paging 3.3.0-beta01 में बिना किसी बदलाव के रिलीज़ किया गया है. वर्शन 3.3.0-rc01 में ये कमिट शामिल हैं.

वर्शन 3.3.0-beta01

3 अप्रैल, 2024

androidx.paging:paging-*:3.3.0-beta01 को बिना किसी खास बदलाव के रिलीज़ किया गया है. वर्शन 3.3.0-beta01 में ये कमिट शामिल हैं.

वर्शन 3.3.0-alpha05

20 मार्च, 2024

androidx.paging:paging-*:3.3.0-alpha05 रिलीज़ हो गया है. वर्शन 3.3.0-alpha05 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • पेजिंग अब सामान्य कोड के लिए, AndroidX Annotation @MainThread एनोटेशन का इस्तेमाल करता है. (I78f0d, b/327682438)

वर्शन 3.3.0-alpha04

6 मार्च, 2024

androidx.paging:paging-*:3.3.0-alpha04 रिलीज़ हो गया है. वर्शन 3.3.0-alpha04 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • Kotlin मल्टीप्लेटफ़ॉर्म के साथ काम करने की सुविधा जोड़ने से जुड़ी दस्तावेज़ की मामूली गड़बड़ियों को ठीक किया गया है. (aosp/2950785)

वर्शन 3.3.0-alpha03

7 फ़रवरी, 2024

androidx.paging:paging-*:3.3.0-alpha03 रिलीज़ हो गया है. वर्शन 3.3.0-alpha03 में ये कमिट शामिल हैं.

नई सुविधाएं

  • PagingDataPresenter अब एक सार्वजनिक क्लास है. अब मल्टीप्लैटफ़ॉर्म प्रज़ेंटर, PagingDataPresenter के ऊपर बनाए जा सकते हैं. इसके लिए, इंटरनल पेजिंग एपीआई या paging-runtime के AsyncPagingDataDiffer की ज़रूरत नहीं होती. (Id1f74, b/315214786)
  • LoadStates और CombinedLoadStates हेल्पर के नए तरीके जोड़े गए हैं. इनसे यह पता लगाया जा सकता है कि LoadStates, Error या NotLoading स्थिति में है या नहीं. इसके अलावा, एक नया एपीआई भी जोड़ा गया है. यह LoadStateFlow पर तब तक इंतज़ार करता है, जब तक लोड NotLoading या गड़बड़ी की स्थिति में नहीं आ जाता. (Id6c67)

व्यवहार में बदलाव

  • PagingData.empty() अब डिफ़ॉल्ट रूप से NotLoading की स्थितियां भेजता है. हालांकि, अगर कस्टम LoadStates को इसके कंस्ट्रक्टर में पास किया जाता है, तो ऐसा नहीं होगा. यह मौजूदा व्यवहार से अलग है. इसमें PagingDataAdapter को सबमिट करने पर LoadStates को डिसपैच नहीं किया जाता है या LazyPagingItems के तौर पर इकट्ठा किए जाने पर, लोडिंग की स्थितियां डिसपैच की जाती हैं. LazyPagingItems के तौर पर इकट्ठा किए जाने पर, अब यह शुरुआती कंपोज़िशन के दौरान तुरंत एक खाली सूची भी दिखाएगा. (I4d11d, b/301833847)

वर्शन 3.3.0-alpha02

20 सितंबर, 2023

androidx.paging:paging-*:3.3.0-alpha02 रिलीज़ हो गया है. वर्शन 3.3.0-alpha02 में ये कमिट शामिल हैं.

Kotlin Multiplatform के साथ काम करने की सुविधा

Paging अब Kotlin Multiplatform के साथ काम करने वाले आर्टफ़ैक्ट उपलब्ध कराता है. ऐसा काफ़ी हद तक, CashApp के multiplatform-paging प्रोजेक्ट की वजह से हुआ है. इससे हमें दो रिपॉज़िटरी के बीच अंतर को कम करने और उन्हें एक-दूसरे के साथ काम करने लायक बनाए रखने में मदद मिलेगी.

  • paging-common ने सभी Paging 3 API को common पर माइग्रेट कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.
  • paging-testing ने अपना कोड common पर ट्रांसफ़र कर दिया है. अब यह Android के साथ-साथ jvm और iOS के साथ भी काम करता है.
  • paging-compose ने अपना कोड common पर ट्रांसफ़र कर दिया है. साथ ही, यह androidx.compose की तरह ही, Android आर्टफ़ैक्ट को कई प्लैटफ़ॉर्म पर उपलब्ध कराता है.
  • paging-runtime, paging-guava, paging-rxjava2, और paging-rxjava3 सिर्फ़ Android पर उपलब्ध रहेंगे.

एपीआई में हुए बदलाव

  • सार्वजनिक Logger इंटरफ़ेस को बंद कर दिया गया है. इसका इस्तेमाल सिर्फ़ इंटरनल तौर पर किया जाता था (I16e95, b/288623117)

बाहरी योगदान

वर्शन 3.3.0-alpha01

20 सितंबर, 2023

  • androidx.paging लाइब्रेरी का यह पहला मल्टीप्लैटफ़ॉर्म रिलीज़ है. इस वर्शन में सिर्फ़ *-jvm और *-android आर्टफ़ैक्ट हैं. macOS, iOS, और Linux के वर्शन के लिए, 3.3.0-alpha02 का इस्तेमाल करें.

वर्शन 3.2

वर्शन 3.2.1

6 सितंबर, 2023

androidx.paging:paging-*:3.2.1 रिलीज़ हो गया है. वर्शन 3.2.1 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक किया गया है जिसमें asSnapshot() का इस्तेमाल करके बनाए गए फ़्लो को पास करने पर, पेजिंग टेस्टिंग आर्टफ़ैक्ट का asSnapshot() एपीआई हैंग हो जाता था. ऐसा इसलिए होता था, क्योंकि asSnapshot() के पास यह जानकारी नहीं होती थी कि लोडिंग कब पूरी हुई (PagingData.from(List, LoadStates) ओवरलोड के उलट).PagingData.from(List) यह तरीका सिर्फ़ उन फ़्लो के लिए काम करता है जिन्हें पूरा किया जा सकता है. जैसे, flowOf(PagingData.from(...)). जिन फ़्लो को पूरा नहीं किया जा सकता उनके लिए यह तरीका काम नहीं करता. जैसे, MutableStateFlow, PagingData.from ओवरलोड का इस्तेमाल करें, जो LoadStates उपलब्ध कराता है). (I502c3)
  • Paging Compose अब अंदरूनी तौर पर AndroidUiDispatcher.Main का इस्तेमाल करता है. इससे यह पक्का किया जाता है कि नया डेटा उसी फ़्रेम में उपलब्ध हो जिसमें डेटा लोड हो रहा है. (Ia55af)

वर्शन 3.2.0

26 जुलाई, 2023

androidx.paging:paging-*:3.2.0 रिलीज़ हो गया है. वर्शन 3.2.0 में ये कमिट शामिल हैं.

3.1.0 के बाद हुए अहम बदलाव

  • Paging Compose, एपीआई के तौर पर इस्तेमाल करने के लिए स्थिर हो गया है. इसे वापस Paging में मर्ज कर दिया गया है. अब इसका वर्शन, Paging के अन्य सभी आर्टफ़ैक्ट से मेल खाता है. 3.1.0 के बाद किए गए बदलावों में ये शामिल हैं:
    • PagingData.from(fakeData) बनाकर और उस PagingData.from(fakeData) को MutableStateFlow (जैसे, MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) में रैप करके, नकली डेटा की सूची की झलक देखने की सुविधा. इस फ़्लो को @Preview कंपोज़ेबल में collectAsLazyPagingItems() के लिए रिसीवर के तौर पर पास करें, ताकि झलक देखी जा सके.PagingData
    • LazyVerticalGrid और HorizontalPager जैसे सभी लेज़ी लेआउट के साथ-साथ, Wear और TV लाइब्रेरी के कस्टम लेज़ी कॉम्पोनेंट के लिए सहायता. यह नए लोअर लेवल LazyPagingItems एक्सटेंशन के तरीकों itemKey और itemContentType की मदद से किया गया है. इससे आपको key और contentType पैरामीटर को स्टैंडर्ड items एपीआई पर लागू करने में मदद मिलती है. ये एपीआई, LazyColumn और LazyVerticalGrid के साथ-साथ HorizontalPager जैसे एपीआई में इनके बराबर के पैरामीटर के लिए पहले से मौजूद हैं.
    • items(lazyPagingItems) और itemsIndexed(lazyPagingItems) अब काम नहीं करते. ये सिर्फ़ LazyListScope के साथ काम करते थे.
  • नया paging-testing आर्टफ़ैक्ट, जो आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग और Paging के साथ उसके इंटिग्रेशन के लिए डिज़ाइन किए गए एपीआई उपलब्ध कराता है. उदाहरण के लिए, इसमें ये शामिल हैं
    • TestPager क्लास है. इसकी मदद से, Pager और असली यूज़र इंटरफ़ेस (यूआई) से अलग, अपने कस्टम PagingSource को लागू करने के तरीके की पुष्टि की जा सकती है.
    • ​​asPagingSourceFactory एपीआई, जो किसी Flow<List<Value>> या स्टैटिक List<Value> को PagingSourceFactory में बदल सकते हैं. इस PagingSourceFactory को टेस्ट में Pager को पास किया जा सकता है
    • asSnapshot, Flow<PagingData<Value>> पर Kotlin एक्सटेंशन है. यह Flow<PagingData<Value>> को सीधे List<Value> में बदलता है. asSnapshot lambda की मदद से, scrollTo या appendScrollWhile जैसे एपीआई के ज़रिए अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) की नकल की जा सकती है. इससे, पेज वाले डेटा के सेट में किसी भी समय यह पुष्टि की जा सकती है कि डेटा का स्नैपशॉट सही है.
  • डिफ़ॉल्ट लॉग जोड़े गए हैं, ताकि पेजिंग की डीबग करने से जुड़ी जानकारी को दो लेवल पर दिखाया जा सके: VERBOSE और DEBUG. adb shell setprop log.tag.Paging [DEBUG|VERBOSE] कमांड का इस्तेमाल करके, लॉग चालू किए जा सकते हैं. यह व्यू के साथ पेजिंग या कंपोज़ के साथ पेजिंग, दोनों पर लागू होता है.
  • PagingDataAdapter और AsyncPagingDataDiffer के लिए कंस्ट्रक्टर जोड़े गए हैं. ये CoroutineDispatcher के बजाय CoroutineContext स्वीकार करते हैं.
  • एक नया PagingSourceFactory फ़ंक्शनल इंटरफ़ेस जोड़ा गया है. यह पिछले () -> PagingSource लैम्ब्डा की तुलना में, ज़्यादा साफ़ तौर पर एपीआई के बारे में जानकारी देता है. इस फ़ैक्ट्री का इस्तेमाल, Pager को इंस्टैंशिएट करने के लिए किया जा सकता है.

वर्शन 3.2.0-rc01

21 जून, 2023

androidx.paging:paging-*:3.2.0-rc01 रिलीज़ हो गया है. वर्शन 3.2.0-rc01 में ये कमिट शामिल हैं.

बाहरी योगदान

  • Veyndan का धन्यवाद. उन्होंने Paging को Android/JVM की खास बातों से अलग करने में योगदान दिया. (#553, #554, #555, #559)

वर्शन 3.2.0-beta01

7 जून, 2023

androidx.paging:paging-*:3.2.0-beta01 रिलीज़ हो गया है. वर्शन 3.2.0-beta01 में ये कमिट शामिल हैं.

Paging Compose

  • Paging Compose, आधिकारिक तौर पर एपीआई के स्टेबल वर्शन में उपलब्ध है. इसलिए, इस वर्शन को 1.0.0-alpha20 से अपडेट कर दिया गया है, ताकि यह सभी अन्य पेजिंग आर्टफ़ैक्ट के वर्शन से मेल खाए.

एपीआई में हुए बदलाव

  • Paging Compose से, बंद किए गए items(LazyPagingItems) और itemsIndexed(LazyPagingItems) एपीआई हटा दिए गए हैं. बदले गए एपीआई का उदाहरण देखने के लिए, Paging Compose 1.0.0-alpha20 के रिलीज़ नोट देखें. (I9626e)

वर्शन 3.2.0-alpha06

24 मई, 2023

androidx.paging:paging-*:3.2.0-alpha06 रिलीज़ हो गया है. वर्शन 3.2.0-alpha06 में ये कमिट शामिल हैं.

नई सुविधाएं

  • एक नया PagingSourceFactory फ़ंक्शनल इंटरफ़ेस जोड़ा गया है. यह मौजूदा () -> PagingSource लैम्डा की तुलना में, एपीआई के बारे में ज़्यादा जानकारी देता है. इस फ़ैक्ट्री का इस्तेमाल, Pager को इंस्टैंशिएट करने के लिए किया जा सकता है. (I33165, b/280655188)
  • paging-testing का नया List<Value>.asPagingSourceFactory() जोड़ा गया है, ताकि PagingSourceFactory मिल सके. यह सिर्फ़ डेटा की ऐसी सूची से लोड होता है जिसे बदला नहीं जा सकता. Flow<List<Value>> पर मौजूद मौजूदा एक्सटेंशन का इस्तेमाल, अब भी स्टैटिक डेटा की कई जनरेशन के साथ टेस्टिंग के लिए किया जाना चाहिए. (Id34d1, b/280655188)

एपीआई में हुए बदलाव

  • पेजिंग-टेस्टिंग में मौजूद सभी सार्वजनिक एपीआई को अब @VisibleForTesting के साथ एनोटेट किया गया है, ताकि यह पक्का किया जा सके कि इन एपीआई का इस्तेमाल सिर्फ़ टेस्ट में किया जाए. (I7db6e)
  • asSnapshot एपीआई को अब CoroutineScope पास करने की ज़रूरत नहीं है. अब यह डिफ़ॉल्ट रूप से, पैरंट स्कोप से मिले कॉन्टेक्स्ट का इस्तेमाल करता है. (Id0a78, b/282240990)
  • TestPager कंस्ट्रक्टर पैरामीटर को फिर से क्रम में लगाया गया है, ताकि वे Pager कंस्ट्रक्टर पैरामीटर (I6185a) के क्रम से मेल खाएं
  • पेजिंग-टेस्टिंग के लिए, lambda टाइप () -> PagingSource<Key, Value> के इस्तेमाल को टाइप PagingSourceFactory<Key, Value> में माइग्रेट किया गया. (I4a950, b/280655188)

व्यवहार में बदलाव

  • asSnapshot पेजिंग टेस्ट चलाने के लिए, अब मुख्य डिस्पैचर की ज़रूरत नहीं है. इसे सेट करने से, अब टेस्ट के व्यवहार में कोई बदलाव नहीं होता. (Ie56ea)

वर्शन 3.2.0-alpha05

3 मई, 2023

androidx.paging:paging-*:3.2.0-alpha05 रिलीज़ हो गया है. वर्शन 3.2.0-alpha05 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • asSnapshot के Paging Testing API ने अब अपने loadOperations पैरामीटर को डिफ़ॉल्ट रूप से खाली लैम्ब्डा पर सेट कर दिया है. इससे, शुरुआती रीफ़्रेश लोड से डेटा वापस पाने के लिए, लोड ऑपरेशन पास किए बिना asSnapshot को कॉल किया जा सकता है. (Ied354, b/277233770)

दस्तावेज़ में किए गए सुधार

  • asPagingSourceFactory() के बारे में दस्तावेज़ को अपडेट किया गया है. इसमें यह साफ़ तौर पर बताया गया है कि यह Flow पर एक एक्सटेंशन मेथड है. यह PagingSource इंस्टेंस जनरेट करने के लिए, फिर से इस्तेमाल किया जा सकने वाला फ़ैक्ट्री ऑब्जेक्ट दिखाता है. (I5ff4f, I705b5)
  • LoadResult.Pageकंस्ट्रक्टर के दस्तावेज़ को अपडेट किया गया है. इससे यह साफ़ तौर पर बताया गया है कि जंप करने की सुविधा के लिए, itemsBefore और itemsAfter को ओवरराइड करना ज़रूरी है. (Ied354)

बाहरी योगदान

  • Veyndan का धन्यवाद. उन्होंने Paging को Android/JVM की खास बातों से अलग करने में योगदान दिया. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)

वर्शन 3.2.0-alpha04

8 फ़रवरी, 2023

androidx.paging:paging-*:3.2.0-alpha04 रिलीज़ हो गया है. वर्शन 3.2.0-alpha04 में ये कमिट शामिल हैं.

पेजिंग की जांच करना

  • paging-testing आर्टफ़ैक्ट में अब asPagingSourceFactory तरीका शामिल है. इससे Flow<List<Value>> से pagingSourceFactory बनाया जा सकता है, ताकि इसे Pager को दिया जा सके. फ़्लो से निकलने वाला हर List<Value>>, पेज किए गए डेटा के जनरेशन को दिखाता है. इससे पेजिंग की जांच करना आसान हो जाता है. उदाहरण के लिए, PagingData ट्रांसफ़ॉर्मेशन के लिए, Pager के लिए फ़र्ज़ी डेटा सोर्स बनाकर डेटा इकट्ठा किया जा सकता है. (I6f230, b/235528239)
  • paging-testing आर्टफ़ैक्ट को नए एपीआई के साथ अपडेट किया गया है. ये एपीआई, Flow<PagingData<T>> में मौजूद डेटा की पुष्टि करने के लिए सही हैं. इसका इस्तेमाल, उदाहरण के लिए, ViewModel लेयर से Flow<PagingData<T>> के आउटपुट की पुष्टि करने के लिए किया जा सकता है.

    ऐसा Flow<PagingData<Value>> पर मौजूद asSnapshot Kotlin एक्सटेंशन की मदद से किया जाता है. यह Flow<PagingData<Value>> को सीधे List<Value> में बदल देता है. asSnapshot लैंबडा की मदद से, scrollTo या appendScrollWhile जैसे एपीआई के ज़रिए, अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को इस तरह से कॉपी किया जा सकता है कि उसे दोहराया जा सके और वह एक जैसा हो. इससे, पेज वाले डेटा के सेट में किसी भी समय, डेटा के स्नैपशॉट की पुष्टि की जा सकती है.

    // Create your ViewModel instance
    val viewModel = 
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != Header 1 }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected values
    

    asSnapshot, suspend का एक तरीका है. इसे runTest के अंदर चलाया जाना चाहिए. ज़्यादा जानकारी के लिए, Android पर Kotlin कोरूटीन की टेस्टिंग करना लेख पढ़ें. (I55fd2, I5bd26, I7ce34, I51f4d, I2249f, Id6223, Ic4bab, Ib29b9, Ic1238, I96def, b/235528239)

एपीआई में हुए बदलाव

  • AsyncPagingDataDiffer और PagingDataAdapter में getItem और peek को किए जाने वाले यूज़र इंटरफ़ेस (यूआई) कॉल को अब सही तरीके से सिर्फ़ मुख्य थ्रेड पर कॉल किया जा सकता है. (I699b6)
  • TestPager के ज़रिए इस्तेमाल किए गए जेनरिक टाइप से वाइल्डकार्ड हटा दिए गए हैं. इससे Java प्रोग्रामिंग लैंग्वेज में लिखे गए कोड में, उन तरीकों के नतीजों का इस्तेमाल करना आसान हो गया है. (I56c42)

वर्शन 3.2.0-alpha03

24 अक्टूबर, 2022

androidx.paging:paging-*:3.2.0-alpha03 रिलीज़ हो गया है. वर्शन 3.2.0-alpha03 में ये कमिट शामिल हैं.

पेजिंग की जांच करना

इस रिलीज़ में एक नया आर्टफ़ैक्ट शामिल है: paging-testing. इस आर्टफ़ैक्ट में ऐसे एपीआई दिए गए हैं जो आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग के लिए डिज़ाइन किए गए हैं. साथ ही, इसमें Paging के साथ इंटिग्रेशन की सुविधा भी दी गई है.

उदाहरण के लिए, इस पहले वर्शन में एक TestPager क्लास शामिल है. इसकी मदद से, Pager और असली यूज़र इंटरफ़ेस (यूआई) से अलग, अपने कस्टम PagingSource को लागू करने के तरीके की पुष्टि की जा सकती है. आम तौर पर, आपको एंड-टू-एंड पेजिंग इंटिग्रेशन को सिम्युलेट करने के लिए इसकी ज़रूरत होती है.

TestPager को फ़र्ज़ी माना जाना चाहिए. यह एक टेस्ट डबल है, जो Pager के असली वर्शन की तरह काम करता है. साथ ही, PagingSource की जांच करने के लिए, आसान एपीआई उपलब्ध कराता है. ये suspend एपीआई हैं और इन्हें runTest में चलाना चाहिए. इसके बारे में Android पर Kotlin coroutines की जांच करने से जुड़ी गाइड में बताया गया है.

इन एपीआई के इस्तेमाल का उदाहरण, room-paging टेस्ट में देखा जा सकता है. इन्हें TestPager का इस्तेमाल करने के लिए फिर से बनाया गया था.

एपीआई में हुए बदलाव

  • इस कुकी की मदद से, LoadResult.Page.data से LoadResult.Page.iterator() तक आसानी से दोहराया जा सकता है. इससे, List<LoadResult.Page> दिए जाने पर, Kotlin की स्टैंडर्ड लाइब्रेरी के flatten तरीके का इस्तेमाल किया जा सकता है. जैसे, PagingState की pages प्रॉपर्टी के साथ, जिसे PagingSource.getRefreshKey तरीके में पास किया जाता है. (Ie0718)

वर्शन 3.2.0-alpha02

10 अगस्त, 2022

androidx.paging:paging-*:3.2.0-alpha02 रिलीज़ हो गया है. वर्शन 3.2.0-alpha02 में ये कमिट शामिल हैं.

नई सुविधाएं

  • पेजिंग अब AsyncPagingDataDifferया PagingDataAdapter क्लास के ज़रिए लॉग उपलब्ध कराता है, ताकि PagingData से इकट्ठा की गई डीबग करने से जुड़ी जानकारी को दिखाया जा सके.
  • लॉगिंग की सुविधा को adb shell कमांड adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159) का इस्तेमाल करके चालू किया जा सकता है

गड़बड़ियां ठीक की गईं

  • paging-common:3.2.0-alpha01 को रनटाइम paging-runtime:3.1.1 या इससे पुराने वर्शन के साथ इस्तेमाल करते समय, PagingDataDiffer कंस्ट्रक्टर के न होने की गड़बड़ी को ठीक किया गया है.(b/235256201)

वर्शन 3.2.0-alpha01

1 जून, 2022

androidx.paging:paging-*:3.2.0-alpha01 रिलीज़ हो गया है. वर्शन 3.2.0-alpha01 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingDataAdapter और AsyncPagingDataDiffer के लिए कंस्ट्रक्टर जोड़े गए हैं. ये CoroutineDispatcher के बजाय CoroutineContext स्वीकार करते हैं. (Idc878)
  • डिफ़ॉल्ट रूप से, प्रज़ेंटर के डिवाइस पर PagingData.from() और PagingData.empty() का असर CombinedLoadStates पर नहीं पड़ेगा. इन कंस्ट्रक्टर में sourceLoadStates और remoteLoadStates को पास करने की अनुमति देने वाला एक नया ओवरलोड जोड़ा गया है.इससे, LoadStates को पूरी तरह से टर्मिनल के तौर पर सेट करने के मौजूदा व्यवहार को बनाए रखा जा सकेगा. NotLoading(endOfPaginationReached = false)) को टारगेट किया जा सकता है. अगर ज़रूरत हो, तो रिमोट स्टेट को भी टारगेट किया जा सकता है. अगर LoadStates पास नहीं किए जाते हैं, तो प्रज़ेंटर को स्टैटिक PagingData मिलने पर, उसकी स्क्रीन पर पिछले CombinedLoadStates दिखते रहेंगे. (Ic3ce5, b/205344028)

गड़बड़ियां ठीक की गईं

  • अब उन मामलों में PagingSource.getRefreshKey() के नतीजे को initialKey के नतीजे से ज़्यादा प्राथमिकता दी जाती है जहां यह शून्य वैल्यू दिखाता है, लेकिन initialKey के लिए शून्य से अलग वैल्यू सेट की गई है. (Ic9542, b/230391606)

बाहरी योगदान

  • test-coroutines-lib माइग्रेट करने की वजह से, :compose:ui:ui-test API (updateApi) अपडेट किया गया (I3366d)

वर्शन 3.1

वर्शन 3.1.1

9 मार्च, 2022

androidx.paging:paging-*:3.1.1 रिलीज़ हो गया है. वर्शन 3.1.1 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • जनरेशन के बीच में मौजूद ऐसे LoadState.NotLoading इवेंट हटाए गए जिन्हें .cachedIn() ने गलत तरीके से डाला था. इस बदलाव से, LoadState में बदलावों पर प्रतिक्रिया देना ज़्यादा आसान हो जाता है. ऐसा इसलिए, क्योंकि इसमें ऐसे गैर-ज़रूरी LoadState.NotLoading इवेंट हटा दिए जाते हैं जो लोड नहीं हो पाए थे. ये इवेंट, लोड नहीं हो पाने की समस्या को ठीक करने के लिए फिर से कोशिश करने, रीफ़्रेश करने या अमान्य होने के दौरान जनरेट हुए थे.

वर्शन 3.1.0

17 नवंबर, 2021

androidx.paging:paging-*:3.1.0 रिलीज़ हो गया है. वर्शन 3.1.0 में ये कमिट शामिल हैं.

3.0.0 के बाद हुए अहम बदलाव

  • Flow<PagingData>.observable और Flow<PagingData>.flowable एपीआई अब एक्सपेरिमेंट के तौर पर उपलब्ध नहीं हैं
  • LoadState के व्यवहार में बदलाव:
    • endOfPaginationReached की कीमत, LoadType.REFRESH के लिए हमेशा false रहेगी. यह कीमत PagingSource और RemoteMediator, दोनों के लिए लागू होगी
    • पेजिंग से मिले LoadStates को अब डाउनस्ट्रीम में भेजने से पहले, PagingSource और RemoteMediator, दोनों से मान्य वैल्यू मिलने का इंतज़ार करना होगा. PagingData की नई जनरेशन अब हमेशा रीफ़्रेश स्टेट के लिए Loading से शुरू होगी. कुछ मामलों में, यह गलत तरीके से NotLoading पर रीसेट नहीं होगी.
    • प्रज़ेंटर एपीआई पर .loadStateFlow और .addLoadStateListener, अब शुरुआती CombinedLoadStates को बार-बार नहीं भेजते हैं. इसमें हमेशा मध्यस्थ की स्थितियां null पर सेट होती हैं
  • पुरानी जनरेशन के प्रॉडक्ट के लिए, अब अमान्य होने या नई जनरेशन के प्रॉडक्ट के उपलब्ध होने पर, सदस्यता तुरंत रद्द हो जाती है. अब Flow<PagingData> पर .collectLatest का इस्तेमाल करना ज़रूरी नहीं होगा. हालांकि, अब भी ऐसा करने का सुझाव दिया जाता है.
  • PagingSource.LoadResult.Invalid को PagingSource.load से नए रिटर्न टाइप के तौर पर जोड़ा गया है. इससे Paging, इस PagingSource के लिए लोड करने के किसी भी लंबित या आने वाले अनुरोध को खारिज कर देता है और उसे अमान्य कर देता है. इस रिटर्न टाइप को ऐसे डेटा को मैनेज करने के लिए डिज़ाइन किया गया है जो अमान्य हो सकता है या पुराना हो सकता है. यह डेटा, डेटाबेस या नेटवर्क से वापस मिल सकता है.
  • .onPagesPresented और .addOnPagesUpdatedListener प्रज़ेंटर एपीआई जोड़े गए. ये एपीआई, यूज़र इंटरफ़ेस (यूआई) में पेज दिखाए जाने पर सिंक्रोनस तरीके से ट्रिगर होते हैं. पेज के अपडेट इन स्थितियों में हो सकते हैं:
    • PagingData की नई जनरेशन का शुरुआती लोड पूरा हो जाता है. भले ही, नई जनरेशन में दिखाए गए आइटम में कोई बदलाव हुआ हो या नहीं. जैसे, अगर नई जनरेशन में, शुरुआती लोड पूरा होने के बाद कोई अपडेट नहीं होता है, क्योंकि सूची बिलकुल एक जैसी है, तो भी यह कॉलबैक ट्रिगर होगा.
    • पेज को तब भी डाला जाता है, जब डाले गए पेज में कोई नया आइटम मौजूद न हो.
    • पेज को हटा दिया जाता है, भले ही वह खाली हो.

वर्शन 3.1.0-rc01

3 नवंबर, 2021

androidx.paging:paging-*:3.1.0-rc01 रिलीज़ हो गया है. वर्शन 3.1.0-rc01 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • .cachedIn() में रेस कंडीशन + मेमोरी लीक की समस्या ठीक की गई है. यह समस्या तब होती थी, जब Paging डाउनस्ट्रीम से कई लोड इवेंट भेजे जाते थे. ऐसा तब होता था, जब कोई ऑब्ज़र्वर नहीं होता था या जब कोई ऑब्ज़र्वर नए PagingData पर स्विच कर रहा होता था. (Ib682e)

वर्शन 3.1.0-beta01

13 अक्टूबर, 2021

androidx.paging:paging-*:3.1.0-beta01 रिलीज़ हो गया है. वर्शन 3.1.0-beta01 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • इस समस्या को ठीक किया गया है. इसमें कई आइटम को तेज़ी से ऐक्सेस करने पर, उन्हें प्रीफ़ेचडिस्टेंस में शामिल नहीं किया जाता था. इससे पेज लोड होने में समस्या आती थी. यह समस्या तब ज़्यादा होती है, जब कई आइटम एक साथ इस तरह से दिखाए जाते हैं कि उपयोगकर्ता के स्क्रोल करने की दिशा के हिसाब से आइटम लोड होने में ज़्यादा समय लगता है. इन आइटम ऐक्सेस को अब बफ़र किया जाता है और साथ ही प्राथमिकता दी जाती है, ताकि इन्हें हटाया न जा सके. (aosp/1833273)

वर्शन 3.1.0-alpha04

29 सितंबर, 2021

androidx.paging:paging-*:3.1.0-alpha04 रिलीज़ हो गया है. वर्शन 3.1.0-alpha04 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • Flow<PagingData>.observable और Flow<PagingData>.flowable एपीआई, अब एक्सपेरिमेंट के तौर पर उपलब्ध नहीं हैं. (Ie0bdd)

गड़बड़ियां ठीक की गईं

  • LoadStates के लिए, endOfPaginationReached अब हमेशा false होता है.LoadType.REFRESH पहले, RemoteMediator REFRESH के लिए 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) पर सेट होती हैं. इसका मतलब है कि:

    1. RemoteMediator का इस्तेमाल करने पर, मध्यस्थ की स्थितियां हमेशा भरी जाएंगी.
    2. .loadStateFlow पर नया loadState लिसनर या नया कलेक्टर रजिस्टर करने पर, अगर उसे PagingData से कोई असली CombinedLoadStates नहीं मिला है, तो वह अब मौजूदा वैल्यू तुरंत नहीं भेजेगा. ऐसा तब हो सकता है, जब कोई कलेक्टर या लिसनर, PagingData सबमिट किए जाने से पहले ही शुरू हो जाए. (I1a748)

वर्शन 3.1.0-alpha03

21 जुलाई, 2021

androidx.paging:paging-*:3.1.0-alpha03 रिलीज़ हो गया है. वर्शन 3.1.0-alpha03 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingSource में LoadResult.Invalid नाम का तीसरा LoadResult रिटर्न टाइप जोड़ा गया है. जब PagingSource.load, LoadResult.Invalid दिखाता है, तो पेजिंग की सुविधा लोड किए गए डेटा को खारिज कर देगी और PagingSource को अमान्य कर देगी. इस तरह के नतीजे को इस तरह से डिज़ाइन किया गया है कि यह ऐसे डेटा को हैंडल कर सके जो अमान्य हो सकता है या पुराना हो सकता है. यह डेटा, डेटाबेस या नेटवर्क से मिल सकता है.

    उदाहरण के लिए, अगर डेटाबेस में डेटा लिखा जाता है, लेकिन PagingSource समय पर अमान्य नहीं होता है, तो यह ऐसे नतीजे दिखा सकता है जो एक-दूसरे से मेल नहीं खाते.ऐसा तब होता है, जब PagingSource का इस्तेमाल, उस डेटासेट के डेटा को लोड करने के लिए किया जाता है जिसमें बदलाव नहीं किया जा सकता. जैसे, LIMIT OFFSET स्टाइल वाले डीबी लागू किए जाते हैं). इस स्थिति में, लोड करने के बाद अमान्य होने की जांच करने और LoadResult.Invalid को वापस लाने का सुझाव दिया जाता है. इससे Paging, इस PagingSource के लिए लोड करने के किसी भी लंबित या आने वाले अनुरोध को खारिज कर देता है और इसे अमान्य कर देता है.

    इस तरह के डेटा सोर्स को Paging2 API भी इस्तेमाल कर सकता है. इसके लिए, LivePagedList या RxPagedList का इस्तेमाल किया जाता है. Paging2 के PagedList API के साथ PagingSource का इस्तेमाल करने पर, PagedList तुरंत अलग हो जाता है. इससे इस PagedList पर डेटा लोड करने की कोशिशें रुक जाती हैं. साथ ही, PagingSource पर अमान्य होने की स्थिति ट्रिगर हो जाती है.

    LoadResult एक सील की गई क्लास है. इसका मतलब है कि यह सोर्स के साथ काम न करने वाला बदलाव है. इसलिए, PagingSource.load के नतीजों का सीधे तौर पर इस्तेमाल करने वाले यूज़ केस को कंपाइल टाइम पर LoadResult.Invalid को हैंडल करना होगा. उदाहरण के लिए, Kotlin का इस्तेमाल करने वाले ऐसे लोग जो रिटर्न टाइप की जांच करने के लिए exhaustive-when का इस्तेमाल करते हैं उन्हें Invalid टाइप के लिए जांच जोड़नी होगी. (Id6bd3, b/191806126, b/192013267)

गड़बड़ियां ठीक की गईं

  • PagingSource.registerInvalidatedCallback या DataSource.addInvalidatedCallback के ज़रिए जोड़े गए अमान्य होने के कॉलबैक, अब अपने-आप ट्रिगर हो जाते हैं. ऐसा तब होता है, जब उन्हें ऐसे PagingSource / DataSource पर रजिस्टर किया गया हो जो पहले से ही अमान्य है. इससे रेस कंडीशन की समस्या ठीक हो जाती है. इस वजह से, पेजिंग के अमान्य होने के सिग्नल कम हो जाते थे और शुरुआती लोड के दौरान पहले से ही अमान्य सोर्स दिए जाने पर, पेजिंग रुक जाती थी. इसके अलावा, अब ट्रिगर होने के बाद अमान्य करने वाले कॉलबैक को सही तरीके से हटा दिया जाता है, क्योंकि उन्हें ज़्यादा से ज़्यादा एक बार कॉल किया जाता है. (I27e69)
  • नई PagedList स्ट्रीम से, प्लेसहोल्डर की शुरुआती वैल्यू (InitialPagedList) सबमिट करना. उदाहरण के लिए, LivePagedListBuilder या RxPagedListBuilder, पहले से लोड किए गए डेटा को अब मिटाएगा नहीं.

वर्शन 3.1.0-alpha02

1 जुलाई, 2021

androidx.paging:paging-*:3.1.0-alpha02 रिलीज़ हो गया है. वर्शन 3.1.0-alpha02 में ये कमिट शामिल हैं.

नई सुविधाएं

  • onPagesPresented लिसनर और फ़्लो प्रेजेंटर एपीआई जोड़े गए हैं. ये एपीआई, यूज़र इंटरफ़ेस (यूआई) में दिखाए गए पेजों के अपडेट होने के तुरंत बाद ट्रिगर होते हैं.

    ये अपडेट, यूज़र इंटरफ़ेस (यूआई) के साथ सिंक होते हैं. इसलिए, अपडेट लागू होने के बाद स्थिति की जांच करने के लिए, .snapshot और .getItemCount जैसे अडैप्टर के तरीकों को कॉल किया जा सकता है. ध्यान दें कि .snapshot() को साफ़ तौर पर कॉल करने के लिए छोड़ दिया गया था, क्योंकि हर अपडेट पर ऐसा करना महंगा पड़ सकता है.

    पेज अपडेट इन स्थितियों में हो सकते हैं:

    • PagingData की नई जनरेशन का शुरुआती लोड पूरा हो जाता है. भले ही, नई जनरेशन में दिखाए गए आइटम में कोई बदलाव हुआ हो या नहीं. जैसे, अगर नई जनरेशन में शुरुआती लोड पूरा हो जाता है और सूची में कोई बदलाव नहीं होता है, तो भी यह कॉलबैक ट्रिगर होगा.
    • पेज डाला जाता है, भले ही डाले गए पेज में कोई नया आइटम न हो
    • पेज को हटा दिया जाता है, भले ही हटाया गया पेज खाली हो (I272c9, b/189999634)

गड़बड़ियां ठीक की गईं

  • LivePagedList या RxPagedList से मिली शुरुआती वैल्यू से PagedList.dataSource को ऐक्सेस करने पर, अब IllegalStateException (I96707) नहीं दिखेगा

वर्शन 3.1.0-alpha01

2 जून, 2021

androidx.paging:paging-*:3.1.0-alpha01 रिलीज़ हो गया है. वर्शन 3.1.0-alpha01 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • paging-rxjava3 की ओर से उपलब्ध कराई गई क्लास अब androidx.paging.rxjava3 पैकेज के तहत लाइव हैं, ताकि वे paging-rxjava2 (Ifa7f6) के साथ टकराव न करें

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक किया गया है जिसमें Paging, कभी-कभी RecyclerView को no-op differ इवेंट भेजता था. इससे कुछ लिसनर पहले ही ट्रिगर हो जाते थे. (Ic507f, b/182510751)

बाहरी योगदान

  • rxjava3 आर्टफ़ैक्ट में, बंद किए गए PagedList compat API जोड़े गए (Id1ce2, b/182497591)

Paging Compose वर्शन 1.0.0

वर्शन 1.0.0-alpha20

24 मई, 2023

androidx.paging:paging-compose:1.0.0-alpha20 रिलीज़ हो गया है. वर्शन 1.0.0-alpha20 में ये कमिट शामिल हैं.

नई सुविधाएं

  • Paging Compose अब फ़र्ज़ी डेटा की सूची की झलक देखने की सुविधा देता है.इसके लिए, एक PagingData.from(fakeData) बनाएं और उस PagingData.from(fakeData) को MutableStateFlow में रैप करें. उदाहरण के लिए,PagingData MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) का इस्तेमाल किया जाता है. इस डेटा को @Preview में इनपुट के तौर पर इस्तेमाल करके, collectAsLazyPagingItems() पर किए गए कॉल में LazyPagingItems की झलक देखी जा सकती है. (I8a78d, b/194544557)

गड़बड़ियां ठीक की गईं

  • pager.flow.cachedIn से कैश किया गया डेटा, LazyPagingItems में इकट्ठा किया जाता है. अब यह डेटा, स्थिति को वापस लाने के बाद तुरंत उपलब्ध होगा. इसके लिए, एसिंक्रोनस कलेक्शन की ज़रूरत नहीं होगी. इसका मतलब है कि स्थिति वापस आने के बाद, कंपोज़िशन के तुरंत बाद कैश मेमोरी में सेव किया गया डेटा दिखाने के लिए तैयार हो जाएगा. (I97a60, b/177245496)

वर्शन 1.0.0-alpha19

3 मई, 2023

androidx.paging:paging-compose:1.0.0-alpha19 रिलीज़ हो गया है. वर्शन 1.0.0-alpha19 में ये कमिट शामिल हैं.

सभी लेज़ी लेआउट के साथ काम करता है

इससे पहले, Paging Compose, LazyListScope पर कस्टम items और itemsIndexed एक्सटेंशन उपलब्ध कराता था. इसका मतलब है कि Paging Compose को LazyVerticalGrid, HorizontalPager या Wear और TV लाइब्रेरी से मिले अन्य कस्टम लेज़ी कॉम्पोनेंट जैसे अन्य लेज़ी लेआउट के साथ इस्तेमाल नहीं किया जा सकता था. इस रिलीज़ का मुख्य अपडेट, इस समस्या को ठीक करना है.

ज़्यादा लेज़ी लेआउट के साथ काम करने के लिए, हमें अलग लेयर पर एपीआई बनाने पड़े. हर लेज़ी लेआउट के लिए कस्टम items एपीआई उपलब्ध कराने के बजाय, Paging Compose अब itemKey और itemContentType में LazyPagingItems पर एक्सटेंशन के थोड़े कम लेवल के तरीके उपलब्ध कराता है. इन एपीआई का मकसद, key और contentType पैरामीटर को स्टैंडर्ड items एपीआई में लागू करने में आपकी मदद करना है. ये एपीआई, LazyColumn और LazyVerticalGrid के साथ-साथ HorizontalPager जैसे एपीआई में इनके बराबर के पैरामीटर के लिए पहले से मौजूद हैं. (Ifa13b, Ib04f0, b/259385813)

इसका मतलब है कि LazyVerticalGrid को सपोर्ट करने के लिए, यह तरीका इस्तेमाल किया जाएगा:

// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()

LazyVerticalGrid(columns = GridCells.Fixed(2)) {
  // Here we use the standard items API
  items(
    count = lazyPagingItems.itemCount,
    // Here we use the new itemKey extension on LazyPagingItems to
    // handle placeholders automatically, ensuring you only need to provide
    // keys for real items
    key = lazyPagingItems.itemKey { it.uniqueId },
    // Similarly, itemContentType lets you set a custom content type for each item
    contentType = lazyPagingItems.itemContentType { "contentType" }
  ) { index ->
    // As the standard items call provides only the index, we get the item
    // directly from our lazyPagingItems
    val item = lazyPagingItems[index]
    PagingItem(item = item)
  }
}

इन नए एपीआई के इस्तेमाल के ज़्यादा उदाहरणों के लिए, कृपया हमारे सैंपल देखें.

इन बदलावों की वजह से, LazyColumn और LazyRow के उदाहरण कुछ लाइनें लंबे हो गए हैं. हालांकि, हमें लगता है कि Paging Compose का इस्तेमाल करने वाले लोगों के लिए, सभी लेज़ी लेआउट में एक जैसा कोड होना ज़रूरी है. इस वजह से, LazyListScope के मौजूदा एक्सटेंशन अब काम नहीं करेंगे. (I0c459, I92c8f, b/276989796)

एपीआई में हुए बदलाव

  • नए एपीआई पर माइग्रेट करने की प्रोसेस को आसान बनाने के लिए, LazyListScope पर मौजूद items और itemsIndexed एक्सटेंशन फ़ंक्शन, अब contentType पैरामीटर के साथ काम करते हैं. यह नए एपीआई में उपलब्ध सुविधा के जैसा ही है. (Ib1918, b/255283378)

डिपेंडेंसी से जुड़े अपडेट

  • Paging Compose ने अपनी डिपेंडेंसी को Compose 1.0.5 से Compose 1.2.1 पर अपडेट कर दिया है. (Ib1918, b/255283378)

वर्शन 1.0.0-alpha18

8 फ़रवरी, 2023

androidx.paging:paging-compose:1.0.0-alpha18 को बिना किसी बदलाव के रिलीज़ किया गया है. वर्शन 1.0.0-alpha18 में ये कमिट शामिल हैं.

वर्शन 1.0.0-alpha17

24 अक्टूबर, 2022

androidx.paging:paging-compose:1.0.0-alpha17 रिलीज़ हो गया है. वर्शन 1.0.0-alpha17 में ये कमिट शामिल हैं.

नई सुविधाएं

  • collectLazyPagingItems को कॉल करते समय, कस्टम CoroutineContext के काम करने की सुविधा जोड़ी गई है. (I7a574, b/243182795, b/233783862)

वर्शन 1.0.0-alpha16

10 अगस्त, 2022

androidx.paging:paging-compose:1.0.0-alpha16 रिलीज़ हो गया है. वर्शन 1.0.0-alpha16 में ये कमिट शामिल हैं.

नई सुविधाएं

  • पेजिंग लाइब्रेरी अब LazyPagingItems क्लास के ज़रिए लॉग उपलब्ध कराती है, ताकि PagingData से इकट्ठा की गई डीबग करने से जुड़ी जानकारी को दिखाया जा सके.
  • adb shell कमांड adb shell setprop log.tag.Paging [DEBUG|VERBOSE] का इस्तेमाल करके, लॉग चालू किए जा सकते हैं. ([b/235527159}(https://issuetracker.google.com/issues/235527159))

गड़बड़ियां ठीक की गईं

  • paging-common:3.1.1 या इससे पुराने वर्शन के साथ paging-compose:1.0.0-alpha15 का इस्तेमाल करते समय, PagingDataDiffer कंस्ट्रक्टर मौजूद न होने की गड़बड़ी को ठीक किया गया है.(b/235256201,b/239868768)

वर्शन 1.0.0-alpha15

1 जून, 2022

androidx.paging:paging-compose:1.0.0-alpha15 रिलीज़ हो गया है. वर्शन 1.0.0-alpha15 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingDataAdapter और AsyncPagingDataDiffer के लिए कंस्ट्रक्टर जोड़े गए हैं. ये CoroutineDispatcher के बजाय CoroutineContext स्वीकार करते हैं. (Idc878)

गड़बड़ियां ठीक की गईं

  • LazyPagingItems अब शुरुआती loadState को सेट करता है, ताकि LoadState.Loading रीफ़्रेश हो सके. (I55043, b/224855902)

वर्शन 1.0.0-alpha14

13 अक्टूबर, 2021

androidx.paging:paging-compose:1.0.0-alpha14 रिलीज़ हो गया है. वर्शन 1.0.0-alpha14 में ये कमिट शामिल हैं.

वर्शन 1.0.0-alpha13

29 सितंबर, 2021

androidx.paging:paging-compose:1.0.0-alpha13 रिलीज़ हो गया है. वर्शन 1.0.0-alpha13 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • LazyPagingItems.snapshot() फ़ंक्शन को LazyPagingItems.itemSnapshotList प्रॉपर्टी (Ie2da8) से बदल दिया गया था
  • अब काम न करने वाले LazyPagingItems.getAsState() को हटा दिया गया है (Ie65e4)

वर्शन 1.0.0-alpha12

21 जुलाई, 2021

androidx.paging:paging-compose:1.0.0-alpha12 रिलीज़ हो गया है. वर्शन 1.0.0-alpha12 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • items(lazyPagingItems) और itemsIndexed(lazyPagingItems) का इस्तेमाल, LazyColumn/Row के साथ पेजिंग को कनेक्ट करने के लिए किया जाता है. अब ये विकल्प कुंजी पैरामीटर स्वीकार करते हैं. इससे आपको आइटम को दिखाने वाली स्टेबल कुंजी तय करने में मदद मिलती है. कुंजियों के बारे में ज़्यादा जानने के लिए, यहां जाएं. (I7986d)
  • अब lazyPagingItems.getAsState(index) फ़ंक्शन का इस्तेमाल नहीं किया जा सकता. इसके बजाय, lazyPagingItems[index] का इस्तेमाल करें. (I086cb, b/187339372)

वर्शन 1.0.0-alpha11

30 जून, 2021

androidx.paging:paging-compose:1.0.0-alpha11 रिलीज़ हो गया है. वर्शन 1.0.0-alpha11 में ये कमिट शामिल हैं.

वर्शन 1.0.0-alpha10

2 जून, 2021

androidx.paging:paging-compose:1.0.0-alpha10 रिलीज़ हो गया है. वर्शन 1.0.0-alpha10 में ये कमिट शामिल हैं.

वर्शन 1.0.0-alpha09

18 मई, 2021

androidx.paging:paging-compose:1.0.0-alpha09 रिलीज़ हो गया है. वर्शन 1.0.0-alpha09 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • LazyPagingItems के itemCount और item getter को अब ऑब्ज़र्व किया जा सकता है. इससे इसका इस्तेमाल LazyVerticalGrid के साथ भी किया जा सकता है (Ie2446, b/171872064, b/168285687)

लिखने की सुविधा के साथ काम करने वाले प्रॉडक्ट

  • androidx.paging:paging-compose:1.0.0-alpha09 सिर्फ़ Compose के 1.0.0-beta07 और इसके बाद के वर्शन के साथ काम करता है.

वर्शन 1.0.0-alpha08

24 फ़रवरी, 2021

androidx.paging:paging-compose:1.0.0-alpha08 रिलीज़ हो गया है. वर्शन 1.0.0-alpha08 में ये कमिट शामिल हैं.

इसे Compose 1.0.0-beta01 के साथ इंटिग्रेट करने के लिए अपडेट किया गया है.

वर्शन 1.0.0-alpha07

10 फ़रवरी, 2021

androidx.paging:paging-compose:1.0.0-alpha07 रिलीज़ हो गया है. वर्शन 1.0.0-alpha07 में ये कमिट शामिल हैं.

इसे Compose alpha12 के साथ इंटिग्रेट करने के लिए अपडेट किया गया है.

वर्शन 1.0.0-alpha06

28 जनवरी, 2021

androidx.paging:paging-compose:1.0.0-alpha06 रिलीज़ हो गया है. वर्शन 1.0.0-alpha06 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

इसे Compose 1.0.0-alpha11 पर निर्भर रहने के लिए अपडेट किया गया है.

वर्शन 1.0.0-alpha05

13 जनवरी, 2021

androidx.paging:paging-compose:1.0.0-alpha05 रिलीज़ हो गया है. वर्शन 1.0.0-alpha05 में ये कमिट शामिल हैं.

इसे Compose 1.0.0-alpha10 पर निर्भर रहने के लिए अपडेट किया गया है.

वर्शन 1.0.0-alpha04

16 दिसंबर, 2020

androidx.paging:paging-compose:1.0.0-alpha04 रिलीज़ हो गया है. वर्शन 1.0.0-alpha04 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • सुविधा से जुड़ी प्रॉपर्टी, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append को अपडेट किया गया है, ताकि मीडिएटर और सोर्स लोड की स्थितियां NotLoading होने के बाद ही, Loading से NotLoading में ट्रांज़िशन हो. इससे यह पक्का किया जा सकेगा कि रिमोट अपडेट लागू हो गया है. (I65619)

वर्शन 1.0.0-alpha03

2 दिसंबर, 2020

androidx.paging:paging-compose:1.0.0-alpha03 रिलीज़ हो गया है. वर्शन 1.0.0-alpha03 में ये कमिट शामिल हैं.

  • इसे Compose 1.0.0-alpha08 के हिसाब से अपडेट किया गया है.

वर्शन 1.0.0-alpha02

11 नवंबर, 2020

androidx.paging:paging-compose:1.0.0-alpha02 रिलीज़ हो गया है. वर्शन 1.0.0-alpha02 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • LazyPagingItems में .peek(), .snapshot(), .retry(), और .refresh() मेथड जोड़े गए हैं. ये मेथड, AsyncPagingDataDiffer / PagingDataAdapter (Iddfe8, b/172041660) में उपलब्ध सुविधाओं को दिखाते हैं

वर्शन 1.0.0-alpha01

28 अक्टूबर, 2020

androidx.paging:paging-compose:1.0.0-alpha01 रिलीज़ हो गया है. वर्शन 1.0.0-alpha01 में ये कमिट शामिल हैं.

नई सुविधाएं

paging-compose आर्टफ़ैक्ट, Paging Library और Jetpack Compose के बीच इंटिग्रेशन उपलब्ध कराता है. इस्तेमाल का एक सामान्य उदाहरण:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

वर्शन 3.0.1

वर्शन 3.0.1

21 जुलाई, 2021

androidx.paging:paging-*:3.0.1 रिलीज़ हो गया है. वर्शन 3.0.1 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • LivePagedList या RxPagedList से जनरेट की गई शुरुआती वैल्यू से PagedList.dataSource को ऐक्सेस करने पर, अब IllegalStateException (I96707) नहीं दिखेगा

वर्शन 3.0.0

वर्शन 3.0.0

5 मई, 2021

androidx.paging:paging-*:3.0.0 रिलीज़ हो गया है. वर्शन 3.0.0 में ये कमिट शामिल हैं.

3.0.0 वर्शन की मुख्य सुविधाएं

Paging 2.x.x के मौजूदा एपीआई के ज़्यादातर हिस्से को बंद कर दिया गया है. इसके बजाय, Paging 3 के नए एपीआई का इस्तेमाल किया जा रहा है. इससे ये सुधार किए जा सकेंगे:

  • Kotlin को-रूटीन और फ़्लो के लिए बेहतर सपोर्ट
  • सदस्यता रद्द करने से जुड़ी सहायता
  • लोड होने की स्थिति और गड़बड़ी के सिग्नल
  • फिर से कोशिश करें + रीफ़्रेश करने की सुविधा
  • DataSource की तीनों सबक्लास को एक ही PagingSource क्लास में जोड़ दिया गया है
  • पेज में पसंद के मुताबिक बदलाव करने की सुविधा. इसमें सेपरेटर जोड़ने के लिए, पहले से मौजूद सुविधा भी शामिल है
  • हेडर और फ़ुटर लोड हो रहे हैं

वर्शन 3.0.0-rc01

21 अप्रैल, 2021

androidx.paging:paging-*:3.0.0-rc01 रिलीज़ हो गया है. वर्शन 3.0.0-rc01 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • उस समस्या को ठीक किया गया है जिसमें Paging, कभी-कभी RecyclerView को no-op differ इवेंट भेजता था. इससे कुछ लिसनर पहले ही ट्रिगर हो जाते थे. (Ic507f, b/182510751)

वर्शन 3.0.0-beta03

24 मार्च, 2021

androidx.paging:paging-*:3.0.0-beta03 रिलीज़ हो गया है. वर्शन 3.0.0-beta03 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • हमने सूची को फिर से लोड करने पर, प्लेसहोल्डर को हैंडल करने के तरीके को बेहतर बनाया है. इससे RecyclerView में अचानक होने वाले बदलावों को रोका जा सकेगा. ज़्यादा जानकारी के लिए, NullPaddedDiffing.md देखें. (If1490, b/170027529, b/177338149)
  • अलग-अलग PagedList बिल्डर (पुराना कंपैटिबिलिटी पाथ), अब DataSource.Factory.create() को कॉल किए जाने पर, Main थ्रेड पर DataSource.Factory.create() को गलत तरीके से सिंक्रोनस रूप से कॉल नहीं करते हैं..build() (b/182798948)

वर्शन 3.0.0-beta02

10 मार्च, 2021

androidx.paging:paging-*:3.0.0-beta02 रिलीज़ हो गया है. वर्शन 3.0.0-beta02 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • Rx3 एक्सटेंशन अब सही तरीके से लागू होते हैं @ExperimentalCoroutinesApi ऑप्ट-इन करने की ज़रूरी शर्त. इससे पहले, उन्हें @get तरीके से मार्क किया गया था. हालांकि, Kotlin कंपाइलर इसे अनदेखा कर देता है. इसकी वजह यह है: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

गड़बड़ियां ठीक की गईं

  • एक्सपेरिमेंट के तौर पर उपलब्ध एपीआई (I6aa29, b/174531520) के सार्वजनिक इस्तेमाल पर पाबंदियां लागू करें
  • उस गड़बड़ी को ठीक कर दिया गया है जिसकी वजह से रिमोट रीफ़्रेश को कॉल करने पर, PagingState हमेशा null होता था.
  • हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, PagingSource से मिले खाली पेजों की वजह से, Paging prefetchDistance को पूरा करने के लिए फिर से फ़ेच नहीं कर पाता था. इस वजह से, Paging “स्टक” हो जाता था.

वर्शन 3.0.0-beta01

10 फ़रवरी, 2021

androidx.paging:paging-*:3.0.0-beta01 रिलीज़ हो गया है. वर्शन 3.0.0-beta01 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • Rx2 और Rx3 रैपर अब उस एक्सपेरिमेंटल एनोटेशन को दिखाते हैं जिस पर वे निर्भर करते हैं. अगर paging-rxjava2 या paging-rxjava3 में Rx कंपैट रैपर का इस्तेमाल किया जा रहा है, तो अब आपको @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d) का इस्तेमाल करके, इस्तेमाल किए गए रैपर को एनोटेट करना होगा

गड़बड़ियां ठीक की गईं

  • कभी-कभी, v2 DataSource एपीआई का इस्तेमाल करते समय, IndexOutOfBoundsException: Inconsistency detected की समस्या ठीक की गई
  • DataSource को कंपैटिबिलिटी पाथ के ज़रिए इस्तेमाल करने पर, isInvalid कॉल को अब मुख्य थ्रेड के बजाय fetchDispatcher पर सही तरीके से लॉन्च किया जाता है. इस अपडेट में, Room के PagingSource को लागू करते समय मुख्य थ्रेड पर डेटाबेस ऐक्सेस करने की वजह से होने वाली IllegalStateException को ठीक किया गया है.

वर्शन 3.0.0-alpha13

27 जनवरी, 2021

androidx.paging:paging-*:3.0.0-alpha13 रिलीज़ हो गया है. वर्शन 3.0.0-alpha13 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingSource.getRefreshKey को लागू करना अब ज़रूरी है. यह अब एक ऐब्स्ट्रैक्ट फ़ंक्शन है, जिसे डिफ़ॉल्ट रूप से लागू नहीं किया जाता. माइग्रेट करने वाले उपयोगकर्ता, डिफ़ॉल्ट सेटिंग का इस्तेमाल जारी रख सकते हैं. इसमें सिर्फ़ null दिखता है. हालांकि, getRefreshKey() में उपयोगकर्ता की मौजूदा स्क्रोल पोज़िशन के आधार पर एक कुंजी दिखनी चाहिए. इससे पेजिंग, PagingState.anchorPosition के ज़रिए व्यूपोर्ट के बीच में कॉन्टेंट लोड करना जारी रख सकती है. (I4339a)
  • InvalidatingPagingSourceFactory अब फ़ाइनल क्लास (Ia3b0a) है
  • टर्मिनल सेपरेटर (हेडर / फ़ुटर) के कॉन्फ़िगरेशन की अनुमति दें. इसके लिए, एक और वैकल्पिक SeparatorType पैरामीटर का इस्तेमाल करें. इसके दो विकल्प हैं:
    • FULLY_COMPLETE - मौजूदा व्यवहार; टर्मिनल सेपरेटर जोड़ने से पहले, PagingSource और RemoteMediator, दोनों के लिए endOfPaginationReached के मार्क होने का इंतज़ार करें. अगर RemoteMediator का इस्तेमाल नहीं किया जाता है, तो remote loadState को अनदेखा कर दिया जाता है. यह विकल्प मुख्य रूप से तब काम आता है, जब आपको सेक्शन सेपरेटर सिर्फ़ तब दिखाने हों, जब सेक्शन पूरी तरह से लोड हो गया हो. इसमें रिमोट सोर्स, जैसे कि नेटवर्क से फ़ेच करना भी शामिल है.
    • SOURCE_COMPLETE - RemoteMediator का इस्तेमाल किए जाने पर भी, सिर्फ़ PagingSource के endOfPaginationReached को मार्क करने का इंतज़ार करें. इससे हेडर और फ़ुटर, शुरुआती लोड के साथ एक साथ दिखते हैं. इससे उपयोगकर्ताओं को टर्मिनल सेपरेटर देखने के लिए स्क्रोल नहीं करना पड़ता. (Ibe993, b/174700218)

गड़बड़ियां ठीक की गईं

  • मेमोरी लीक की एक ऐसी समस्या को ठीक किया गया है जो तब होती है, जब PageFetcher के डेटा लोड करने से पहले ही PagingSource अमान्य हो जाता है. (I9606b, b/174625633)

वर्शन 3.0.0-alpha12

13 जनवरी, 2021

androidx.paging:paging-*:3.0.0-alpha12 रिलीज़ हो गया है. वर्शन 3.0.0-alpha12 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • InvalidatingPagingSourceFactory अब ऐब्सट्रैक्ट क्लास नहीं है, क्योंकि इसमें कभी कोई ऐब्सट्रैक्ट मैथड नहीं था. (I4a8c4)
  • Java का इस्तेमाल करने वाले लोगों के लिए, .cachedIn() का एक ओवरलोड जोड़ा गया है. यह Lifecycle या CoroutineScope के बजाय ViewModel को स्वीकार करता है. (I97d81, b/175332619)
  • Java कॉलर को एसिंक तरीके से PagingData ट्रांसफ़ॉर्मेशन ऑपरेशन इस्तेमाल करने की अनुमति दें. इसके लिए, ट्रांसफ़ॉर्म ऑपरेटर के आर्ग्युमेंट में Executor स्वीकार करें. सभी -Sync ट्रांसफ़ॉर्म ऑपरेटर से -Sync सफ़िक्स हटा दिया गया है. Kotlin Coroutine का इस्तेमाल करने वाले लोगों को, एक्सटेंशन फ़ंक्शन को कॉल करके अंतर करना होगा. यह फ़ंक्शन, सस्पेंडिंग ब्लॉक को स्वीकार करता है. PagingData को बदलने वाले सभी ऑपरेटर को, स्टैटिक PagingDataTransforms क्लास के तहत एक्सटेंशन में ले जाया गया है. Java का इस्तेमाल करने वाले लोगों को, स्टैटिक हेल्पर के ज़रिए कॉल करना होगा. जैसे, PagingDataTransforms.map(pagingData, transform) Kotlin का इस्तेमाल करने वाले लोगों के लिए, सिंटैक्स एक जैसा ही है. हालांकि, आपको फ़ंक्शन इंपोर्ट करना होगा. (If6885, b/172895919)

गड़बड़ियां ठीक की गईं

  • ऐसी गड़बड़ी को ठीक किया गया है जिसमें पेज नंबर के आखिर तक पहुंचने के बाद, adapter.refresh() के दौरान RemoteMediator.load() को कॉल नहीं किया जाता था.

वर्शन 3.0.0-alpha11

16 दिसंबर, 2020

androidx.paging:paging-*:3.0.0-alpha11 रिलीज़ हो गया है. वर्शन 3.0.0-alpha11 में ये कमिट शामिल हैं.

नई सुविधाएं

  • सेव की गई स्थिति की सुविधा को इन बुनियादी इस्तेमाल के उदाहरणों के लिए जोड़ा गया है. हालांकि, इस सुविधा पर अब भी काम चल रहा है. खास तौर पर, लेयर वाले सोर्स के मामले में:
    • फ़्लो को कैश मेमोरी में सेव किया जाता है और ऐप्लिकेशन बंद नहीं होता (जैसे, फ़्लो को व्यू मॉडल में कैश मेमोरी में सेव किया जाता है और गतिविधि को प्रोसेस में फिर से बनाया जाता है)
    • पेजिंग सोर्स को गिना जाता है, प्लेसहोल्डर चालू होते हैं, और लेआउट एक जैसा होता है.

एपीआई में हुए बदलाव

  • PagingSource.getRefreshKey() अब स्टेबल एपीआई (I22f6f, b/173530980) है
  • PagingSource.invalidate अब एक ओपन फ़ंक्शन नहीं है. अगर आपको अमान्य होने पर सूचना चाहिए, तो invalidate को बदलने के बजाय registerInvalidatedCallback तरीके का इस्तेमाल करें. (I628d9, b/173029013, b/137971356)
  • Pager में अब एक ही एक्सपेरिमेंटल कंस्ट्रक्टर है. साथ ही, इसमें रेगुलर कंस्ट्रक्टर भी हैं. एक्सपेरिमेंटल एपीआई को ऑप्ट-इन एनोटेशन के ज़रिए, नॉन-एक्सपेरिमेंटल पब्लिक एपीआई में लीक करने के बजाय, ऐसा किया गया है. (I9dc61, b/174531520)
  • सुविधा से जुड़ी प्रॉपर्टी, CombinedLoadStates.refresh, CombinedLoadStates.prepend, CombinedLoadStates.append को अपडेट किया गया है, ताकि मीडिएटर और सोर्स लोड की स्थितियां NotLoading होने के बाद ही, Loading से NotLoading में ट्रांज़िशन हो. इससे यह पक्का किया जा सकेगा कि रिमोट अपडेट लागू हो गया है. (I65619)
  • LoadParams.pageSize को हटा दिया गया है. इसे पहले ही बंद कर दिया गया था. सुझाव यह है कि आप अपने PagingSource में LoadParams.loadSize का इस्तेमाल करें.

    LoadParams.loadSize हमेशा PagingConfig.pageSize के बराबर होता है. हालांकि, शुरुआती लोड कॉल में यह PagingConfig.initialLoadSize के बराबर होता है.

    अगर Pager या PagedList का इस्तेमाल किए बिना, Paging2 DataSource की जांच की जा रही है, तो हो सकता है कि pageSize, PagingConfig.pageSize से मेल न खाए. ऐसा तब होता है, जब initialLoadSize भी सेट किया जा रहा हो. अगर आपके टेस्ट के लिए यह ज़रूरी है, तो Pager/PagedList का इस्तेमाल करें. इससे, आपके DataSource के लोड करने के तरीकों के लिए, सही PageSize अपने-आप सेट हो जाएगा. (I98ac7, b/149157296)

गड़बड़ियां ठीक की गईं

  • PagingConfig.maxSize सेट होने पर, सेपरेटर का इस्तेमाल करते समय IllegalStateException की वजह से होने वाले क्रैश की समस्या को ठीक किया गया. (I0ed33, b/174787528)
  • उस गड़बड़ी को ठीक किया गया है जिसमें RemoteMediator सेट होने पर, PREPEND / APPEND के लिए लोड की स्थिति, शुरुआती लोड के बाद तुरंत NotLoading(endOfPaginationReached = true) पर अपडेट नहीं होती थी (I8cf5a)
  • हमने एक गड़बड़ी को ठीक किया है .इस गड़बड़ी में, प्रज़ेंटर-साइड एपीआई, जैसे कि .snapshot(), .peek() वगैरह, ListUpdateCallback अपडेट में पुरानी (आउट-ऑफ़-डेट) सूची दिखाते थे.
  • उस गड़बड़ी को ठीक किया गया है जिसमें Separators ऑपरेटर, RemoteMediator के साथ इस्तेमाल किए जाने पर हेडर या फ़ुटर नहीं जोड़ते थे
  • उस गड़बड़ी को ठीक किया गया है जिसमें RemoteMediator के लिए LoadState, NotLoading पर अपडेट होने के बजाय Loading स्टेट में अटक जाता था
  • एक बग ठीक किया गया है. इसमें Paging2.0 के साथ काम करने वाला एपीआई, .asPagingSourceFactory(), DataSource को गलत CoroutineDispatcher पर शुरू कर सकता था. इससे क्रैश होने और एएनआर की संभावित समस्याओं को हल किया जाता है. खास तौर पर, Room के PagingSource के मौजूदा वर्शन का इस्तेमाल करते समय, जो इस कंपैटिबिलिटी पाथ का इस्तेमाल करता है.

वर्शन 3.0.0-alpha10

2 दिसंबर, 2020

androidx.paging:paging-*:3.0.0-alpha10 रिलीज़ हो गया है. वर्शन 3.0.0-alpha10 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • dataRefreshFlow और dataRefreshListener एपीआई के इस्तेमाल पर रोक लगा दी गई है. इसलिए, इन्हें हटा दिया गया है. ऐसा इसलिए किया गया है, क्योंकि ये loadStateFlow / Listener अपडेट के साथ काम नहीं करते. माइग्रेट करने वाले लोगों के लिए, loadStateFlow के बराबर यह है:

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570, b/173530908)

गड़बड़ियां ठीक की गईं

  • RemoteMediator REFRESH के लिए endOfPaginationReached अब LoadState अपडेट में सही तरीके से दिखता है. साथ ही, यह रिमोट REFRESH और PREPEND को ट्रिगर होने से रोकता है.APPEND (I94a3f, b/155290248)
  • शुरुआती पेज खाली होने या फ़िल्टर करने की सुविधा का ज़्यादा इस्तेमाल करने की वजह से, खाली सूची दिखाने पर अब पेजिंग की सुविधा PREPEND शुरू होने या APPEND लोड होने से नहीं रुकेगी. (I3e702, b/168169730)
  • उस समस्या को ठीक किया गया है जिसमें अमान्य होने की प्रोसेस तेज़ी से होने पर, PagingSource की बाद की जनरेशन पर getRefreshKey कॉल नहीं किया जाता था. (I45460, b/170027530)

बाहरी योगदान

  • InvalidatingPagingSourceFactory नाम की एक नई ऐब्स्ट्रैक्ट क्लास जोड़ी गई है. इसमें एक .invalidate() एपीआई है, जो इससे जनरेट होने वाले सभी PagingSource को अमान्य कर देता है. @claraf3 को धन्यवाद! (Ie71fc, b/160716447)

ऐसी समस्याएं जिनके बारे में जानकारी पहले से है

  • RemoteMediator का इस्तेमाल करते समय, ऐसा हो सकता है कि .insertSeparators() ट्रांसफ़ॉर्म से मिले हेडर और फ़ुटर तुरंत न दिखें b/172254056
  • RemoteMediator का इस्तेमाल करने पर, रिमोट LoadState अटक सकता है. ऐसा तब होता है, जब अमान्य होने की प्रोसेस और PagingSource.load(LoadParams.Refresh(...)), RemoteMediator.load() के b/173717820 को वापस भेजने से पहले पूरी हो जाती है

वर्शन 3.0.0-alpha09

11 नवंबर, 2020

androidx.paging:paging-*:3.0.0-alpha09 रिलीज़ हो गया है. वर्शन 3.0.0-alpha09 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • replaceWith क्लॉज़ के साथ, dataRefreshFlow / Listener के तरीकों को पूरी तरह से बंद कर दिया गया है. (I6e2dd)

गड़बड़ियां ठीक की गईं

  • RemoteMediator के साथ सेपरेटर इस्तेमाल करते समय, IllegalArgumentException के थ्रो होने की समस्या को ठीक किया गया है. साथ ही, endOfPagination दिखाने वाला रिमोट लोड अब भी चल रहा है, जबकि अमान्य होने की स्थिति ट्रिगर हो गई है (I3a260)

वर्शन 3.0.0-alpha08

28 अक्टूबर, 2020

androidx.paging:paging-*:3.0.0-alpha08 रिलीज़ हो गया है. वर्शन 3.0.0-alpha08 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • Kotlin / Java के DataSource.InvalidatedCallback वैरिएंट को एक साथ इस्तेमाल किया जा सकता है. इसके लिए, Kotlin में SAM-conversion को चालू करना होगा. यह फ़ंक्शनल इंटरफ़ेस के ज़रिए किया जा सकता है. यह Kotlin 1.4 में उपलब्ध है. इस अपडेट में, एक गड़बड़ी को भी ठीक किया गया है. इस गड़बड़ी में, .map या .mapByPage से बदलने के बाद, अमान्य किए गए कॉलबैक के Kotlin वर्शन को कॉल नहीं किया जाता था. (I1f244, b/165313046)

गड़बड़ियां ठीक की गईं

  • ViewPager के साथ Paging के इंटरैक्शन को काफ़ी हद तक बेहतर बनाया गया है. खास तौर पर, पेज के अमान्य होने की वजह से, अब पेजिंग RemoteMediator#load कॉल को रद्द नहीं करेगी. इसके अलावा, यह तब तक डेटा जोड़ने/पहले से मौजूद डेटा में बदलाव करने का अनुरोध नहीं करेगा, जब तक रीफ़्रेश करने का अनुरोध पूरा नहीं हो जाता. (I6390b, b/162252536)
  • androidx के लिए, MissingGetterMatchingBuilder के लिए एपीआई लिंट चेक की सुविधा चालू की गई है (I4bbea, b/138602561)
  • हमने एक गड़बड़ी को ठीक किया है. इस गड़बड़ी की वजह से, बैकग्राउंड थ्रेड से RecyclerView को सूचना देने पर, .withLoadState* ConcatAdapter हेल्पर क्रैश हो जाते थे (I18bb5, b/170988309)
  • एक गड़बड़ी को ठीक किया गया है. इसमें बहुत छोटे और भरे हुए पेज को लोड करने पर, कभी-कभी प्रीफ़ेच की सुविधा सही तरीके से लोड होने से रुक जाती थी.Iffda3 b/169259468

वर्शन 3.0.0-alpha07

1 अक्टूबर, 2020

androidx.paging:paging-*:3.0.0-alpha07 रिलीज़ हो गया है. वर्शन 3.0.0-alpha07 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • Guava पर आधारित Async PagingData ऑपरेटर अब एक्ज़ीक्यूशन कॉन्टेक्स्ट को कंट्रोल करने के लिए, Executor को पैरामीटर के तौर पर स्वीकार करते हैं. (Id4372)

गड़बड़ियां ठीक की गईं

  • रेस की स्थिति की वजह से, RemoteMediator में IndexOutOfBounds अपवाद को ठीक किया गया है. (I00b7f, b/165821814)
  • DataSource -> PagingSource कन्वर्ज़न में रेस कंडीशन को ठीक किया गया है. इससे, PagingSource, DataSource से अमान्य होने के सिग्नल को अनदेखा कर सकता है.
  • पेज फ़ेच करने के लॉजिक में मौजूद एक समस्या को ठीक किया गया है. इस समस्या की वजह से, कभी-कभी PagingSource की नई जनरेशन तब तक नहीं दिखती थी, जब तक PagingDataAdapter.refresh() को शुरू नहीं किया जाता था
  • उस समस्या को ठीक किया गया है जिसकी वजह से, RemoteMediator के साथ PagingSource में बदले गए DataSource (जैसे कि Room से बनाया गया DataSource) का इस्तेमाल करते समय, कभी-कभी स्क्रोल-पोज़िशन गायब हो जाती थी

बाहरी योगदान

  • PagingData के लिए RxJava2, RxJava3, और Guava पर आधारित एसिंक्रोनस ट्रांसफ़ॉर्मेशन ऑपरेटर जोड़ने के लिए, @simonschiller को धन्यवाद!

वर्शन 3.0.0-alpha06

2 सितंबर, 2020

androidx.paging:paging-*:3.0.0-alpha06 रिलीज़ हो गया है. वर्शन 3.0.0-alpha06 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • UnsupportedOperationException को कॉल करने पर, अब यह साफ़ तौर पर बताया जाता है कि स्टेबल आईडी के लिए सहायता उपलब्ध नहीं है.PagingDataAdapter.setHasStableIds (Ib3890, b/158801427)

गड़बड़ियां ठीक की गईं

  • insertSeparators अब खाली पेजों को फ़िल्टर नहीं करता है. इससे प्रज़ेंटर को प्रीफ़ेच दूरी का पालन करने की अनुमति मिलती है. ऐसा उन मामलों में भी होता है जहां कई खाली पेज डाले जाते हैं. (I9cff6, b/162538908)

वर्शन 3.0.0-alpha05

19 अगस्त, 2020

androidx.paging:paging-*:3.0.0-alpha05 रिलीज़ हो गया है. वर्शन 3.0.0-alpha05 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • अब पेजिंग की सुविधा, पेजों को सही तरीके से प्रीफ़ेच करती है. भले ही, दिखाए गए डेटा को ज़्यादा फ़िल्टर किया गया हो
  • LoadResult.Error को फिर से लोड करने पर, आइटम के ऐक्सेस को गलत तरीके से फिर से ट्रिगर नहीं किया जाएगा

बाहरी योगदान

  • कुछ टेस्ट को साफ़ करने में मदद करने के लिए, क्लारा एफ़ को धन्यवाद! (549612)

वर्शन 3.0.0-alpha04

5 अगस्त, 2020

androidx.paging:paging-*:3.0.0-alpha04 रिलीज़ हो गया है. वर्शन 3.0.0-alpha04 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • AsyncPagingDataDiffer और PagingDataAdapter में peek() एपीआई जोड़ा गया है, ताकि ट्रिगर पेज लोड किए बिना, दिखाए गए डेटा को ऐक्सेस किया जा सके. (I38898, b/159104197)
  • PagingDataAdapter और AsyncPagingDataDiffer में snapshot() एपीआई जोड़ा गया है. इससे पेज फ़ेच किए बिना, दिखाए गए आइटम वापस पाए जा सकते हैं. (I566b6, b/159104197)
  • PagingData.from(List<T>) कंस्ट्रक्टर जोड़ा गया है, ताकि स्टैटिक सूचियां दिखाई जा सकें.इन्हें कुल PagingData फ़्लो के साथ जोड़ा जा सकता है, ताकि कुछ स्थितियों में स्टैटिक सूचियां दिखाई जा सकें. जैसे, शुरुआती REFRESH के पूरा होने से पहले या सिर्फ़ ट्रांसफ़ॉर्मेशन की जांच करने के लिए. (Id134d)
  • dataRefresh Flow / Listener APIs को बंद कर दिया गया है. इनका इस्तेमाल REFRESH पर दिखाए गए आइटम की स्थिति को दिखाने के लिए किया जाता था. हालांकि, loadState Flow / Listener callback timing और itemCount प्रॉपर्टी में सुधार होने की वजह से, अब इनकी ज़रूरत नहीं है (Ia19f3)
  • PagingSource और RemoteMediator के लिए, RxJava3 के साथ काम करने वाले रैपर जोड़े गए (I49ef3, b/161480176)

गड़बड़ियां ठीक की गईं

  • PositionalDataSource को PagingSource में बदल दिया गया है. इसके लिए, toPagingSourceFactory हेल्पर का इस्तेमाल किया गया है. इसमें Room से जनरेट किए गए PagingSource भी शामिल हैं. अब ये जंप करने की सुविधा के साथ सही तरीके से मार्क हो जाते हैं. (I3e84c, b/162161201)
  • submitData के सिंक्रोनस वैरिएंट का इस्तेमाल करने पर, कभी-कभी रेस की वजह से ClosedSendChannelException (I4d702, b/160192222) गड़बड़ी होती थी. इस गड़बड़ी को ठीक कर दिया गया है

बाहरी योगदान

  • Slack की ओर से, RxJava3 के साथ काम करने वाले रैपर जोड़ने के लिए Zac Sweers को धन्यवाद! (I49ef3, b/161480176)

वर्शन 3.0.0-alpha03

22 जुलाई, 2020

androidx.paging:paging-*:3.0.0-alpha03 रिलीज़ हो गया है. वर्शन 3.0.0-alpha03 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingState के लिए कंस्ट्रक्टर अब सार्वजनिक है. इससे getRefreshKey() के टेस्ट को लागू करना आसान हो जाएगा (I8bf15)
  • Java से DataSource kotlin map फ़ंक्शन के वैरिएंट छिपाए गए हैं, ताकि ओरिजनल और kotlin वैरिएंट के बीच अस्पष्टता को दूर किया जा सके. (If7b23, b/161150011)
  • Kotlin का इस्तेमाल करने वाले लोगों की सुविधा के लिए बनाए गए फ़ालतू एपीआई को @JvmSynthetic के तौर पर मार्क किया गया है (I56ae5)
  • LoadResult.Page के कंस्ट्रक्टर के लिए ओवरलोड जोड़े गए हैं, जो itemsBefore और itemsAfter को COUNT_UNDEFINED पर डिफ़ॉल्ट करता है (I47849)
  • मौजूदा PagingData ऑपरेटर को निलंबित करने के तरीके स्वीकार करने के लिए बनाया गया है. साथ ही, Java का इस्तेमाल करने वाले लोगों के लिए, mapSync, flatMapSync, और filterSync जैसे नए ऑपरेटर पेश किए गए हैं. मौजूदा ट्रांसफ़ॉर्मेशन के तरीकों को एक्सटेंशन फ़ंक्शन में ले जाया गया है. इसलिए, Kotlin का इस्तेमाल करने वाले लोगों को अब इन्हें इंपोर्ट करना होगा. (I34239, b/159983232)

गड़बड़ियां ठीक की गईं

  • Room (और PositionalDataSource) PagingSources अब पहले पेज के हिस्से के तौर पर लीडिंग सेपरेटर दिखाएंगे, ताकि उपयोगकर्ता को इसे देखने के लिए स्क्रोल न करना पड़े. (I6f747, b/160257628)
  • अब प्लेसहोल्डर पर आइटम ऐक्सेस करने से, PagingSource लोड सही तरीके से ट्रिगर होते हैं. ऐसा तब तक होता है, जब तक कि PagingData.filter() से बदले जाने के बाद, अनुरोध किए गए इंडेक्स को पूरा करने वाला पेज वापस नहीं आ जाता (I95625, b/158763195)
  • उस बग को ठीक किया गया है जिसकी वजह से, कभी-कभी PagingSource के स्क्रोल करने पर गड़बड़ी होती थी. इससे PagingDataAdapter.retry() को फिर से कोशिश करने से रोका जा सकता था. (I1084f, b/160194384)
  • इस कुकी से उस समस्या को ठीक किया जाता है जिसमें पेज छोड़ने के बाद आइटम ऐक्सेस करने पर, पेज लोड नहीं होते हैं. हालांकि, आइटम ऐक्सेस, प्रीफ़ेच डिस्टेंस (Ie95ae, b/160038730) के दायरे में था
  • PagingConfig.maxSize को सेट करने पर, अब ड्रॉप इवेंट (I2be29, b/159667766) के बाद प्लेसहोल्डर चालू नहीं होते

वर्शन 3.0.0-alpha02

24 जून, 2020

androidx.paging:paging-*:3.0.0-alpha02 रिलीज़ हो गया है. वर्शन 3.0.0-alpha02 में ये कमिट शामिल हैं.

एपीआई में हुए बदलाव

  • PagingConfig के कंस्ट्रक्टर के लिए, सामान्य डिफ़ॉल्ट वैल्यू (I39c50, b/158576040) के साथ ओवरलोड जोड़े गए
  • PagingDataAdapter और AsyncPagingDataDiffer के कंस्ट्रक्टर के लिए ओवरलोड जोड़े गए हैं. इनमें सामान्य डिफ़ॉल्ट वैल्यू (Ie91f5) शामिल हैं
  • अडैप्टर एपीआई, dataRefreshFlow और dataRefreshListener अब एक बूलियन पास करते हैं. इससे यह पता चलता है कि PagingData खाली है या नहीं (I6e37e, b/159054196)
  • RemoteMediator के लिए RxJava और Guava API जोड़े गए - RxRemoteMediator और ListenableFutureRemoteMediator
  • सामान्य आइटम ऐक्सेस करने के लिए, PagingState में हेल्पर जोड़े गए हैं. जैसे, isEmpty() और firstItemOrNull() (I3b5b6, b/158892717)

गड़बड़ियां ठीक की गईं

  • Pager अब फ़ैक्ट्री में PagingSource के फिर से इस्तेमाल होने की जांच करता है, ताकि अमान्य PagingSource के गलती से फिर से इस्तेमाल होने से रोका जा सके. इससे एक अस्पष्ट गड़बड़ी (I99809, b/158486430) होती थी
  • RemoteMediator REFRESH के फ़ेल होने पर, अब PagingSource को लोड होने से नहीं रोका जाएगा (I38b1b, b/158892717)
  • submitData के नॉन-सस्पेंडिंग वर्शन को submitData के सस्पेंडिंग वर्शन के बाद कॉल करने पर, अब कई PagingData पर एक साथ कलेक्शन की वजह से क्रैश नहीं होता. (I26358, b/158048877)
  • कॉन्फ़िगरेशन में बदलाव करने के बाद, "पेजर से दो बार डेटा इकट्ठा नहीं किया जा सकता" अपवाद को ठीक किया गया है (I58bcc, b/158784811)

वर्शन 3.0.0-alpha01

10 जून, 2020

androidx.paging:paging-*:3.0.0-alpha01 रिलीज़ हो गया है. वर्शन 3.0.0-alpha01 में ये कमिट शामिल हैं.

Paging Library को 3.0 वर्शन में अपडेट कर दिया गया है, ताकि कई नई सुविधाओं को चालू किया जा सके.

3.0 वर्शन की नई सुविधाएं

ऐसी समस्याएं जिनके बारे में जानकारी पहले से है

  • Paging 3 के JavaDoc अभी उपलब्ध नहीं हैं. इस बीच, कृपया ऊपर लिंक की गई गाइड या Kotlin के दस्तावेज़ों का इस्तेमाल करें. (b/158614050)

वर्शन 2.1.2

वर्शन 2.1.2

18 मार्च, 2020

androidx.paging:paging:2.1.2 रिलीज़ हो गया है. वर्शन 2.1.2 में, 2.1.0 के मुकाबले ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • अमान्य होने के दौरान किसी पोज़िशन को बदलने पर, कुछ मामलों में IndexOutOfBoundsException से जुड़ी समस्या ठीक की गई.

रिलीज़ से जुड़ी समस्या

  • पेजिंग लाइब्रेरी का वर्शन 2.1.1, गलत तरीके से कॉन्फ़िगर की गई ब्रांच से रिलीज़ किया गया था. इससे, आंशिक रूप से लागू किए गए एपीआई और आने वाली रिलीज़ में उपलब्ध होने वाली सुविधाओं के बारे में जानकारी मिल गई.

  • पेजिंग 2.1.2 में, लोड-सेंटरिंग से जुड़ी समस्या को ठीक करने वाला वह फ़िक्स शामिल है जिसे मूल रूप से 2.1.1 में रिलीज़ किया गया था. हालांकि, इस बार इसे 2.1.0 रिलीज़ के ऊपर सही तरीके से चुना गया है. अगर फ़िलहाल 2.1.1 वर्शन का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि आप इस रिलीज़ पर अपग्रेड करें.

वर्शन 2.1.1

वर्शन 2.1.1

18 दिसंबर, 2019

androidx.paging:paging-*:2.1.1 रिलीज़ हो गया है. वर्शन 2.1.1 में ये कमिट शामिल हैं.

गड़बड़ियां ठीक की गईं

  • जगह की जानकारी देने वाले डेटा सोर्स से लगातार लोड होने वाले शुरुआती डेटा को अब आखिरी बार ऐक्सेस किए गए डेटा के हिसाब से दिखाया जाता है. ऐसा तब होता है, जब प्लेसहोल्डर बंद होते हैं

वर्शन 2.1.0

वर्शन 2.1.0

25 जनवरी, 2019

पेजिंग 2.1.0 को 2.1.0-rc01 में किए गए बदलावों के बिना रिलीज़ किया गया है.

वर्शन 2.1.0-rc01

6 दिसंबर, 2018

पेजिंग 2.1.0-rc01 को 2.1.0-beta01 में किए गए बदलावों के बिना रिलीज़ किया गया है.

वर्शन 2.1.0-beta01

1 नवंबर 2018

पेजिंग 2.1.0-beta01 को 2.1.0-alpha01 में किए गए बदलावों के बिना रिलीज़ किया गया है.

वर्शन 2.1.0-alpha01

12 अक्टूबर, 2018

पेजिंग 2.1.0-alpha01 में दो मुख्य बदलाव किए गए हैं. पहला, पेज ड्रॉपिंग की सुविधा जोड़ी गई है. दूसरा, हर आर्टफ़ैक्ट के लिए KTX एक्सटेंशन लाइब्रेरी जोड़ी गई है. इसके अलावा, एपीआई में कई अन्य बदलाव किए गए हैं और बग ठीक किए गए हैं.

एपीआई में हुए बदलाव

  • मेमोरी में लोड किए गए आइटम की संख्या को सीमित करने के लिए, PagedList.Config.Builder.setMaxSize() जोड़ा गया.
  • androidx.paging.Config() को PagedList.Config.Builder के Kotlin विकल्प के तौर पर जोड़ा गया
  • androidx.paging.PagedList() को PagedList.Builder के Kotlin विकल्प के तौर पर जोड़ा गया
  • DataSourceFactory.toLiveData() को LivePagedListBuilder के Kotlin विकल्प के तौर पर जोड़ा गया
  • RxPagedListBuilder के Kotlin विकल्प के तौर पर, DataSourceFactory.toObservable() और toFlowable() को जोड़ा गया
  • जब PagedList को स्वैप किया जाता है, तब सुनने के लिए AsyncPagedListDiffer.addPagedListListener() जोड़ा गया. b/111698609
  • PagedListAdapter.onCurrentListChanged() वैरिएंट जोड़ा गया है, जो पुरानी और नई सूची को पास करता है. साथ ही, पिछले वैरिएंट को बंद कर दिया गया है.
  • PagedListAdapter/AsyncPagedListDiffer.submitList() वैरिएंट जोड़े गए हैं. ये एक अतिरिक्त कॉलबैक लेते हैं, जो अंतर देखने के बाद, पेज वाली सूची दिखने पर ट्रिगर होता है. इससे, PagedList स्वैप को अन्य यूज़र इंटरफ़ेस (यूआई) अपडेट के साथ सिंक किया जा सकता है. b/73781068
  • PagedList.getLoadedCount() को इसलिए जोड़ा गया है, ताकि आपको पता चल सके कि मेमोरी में कितने आइटम हैं. ध्यान दें कि अगर प्लेसहोल्डर बंद हैं, तो रिटर्न वैल्यू हमेशा .size() के बराबर होती है.

गड़बड़ियां ठीक की गईं

  • सूचियों का फिर से इस्तेमाल किए जाने पर, अंतर की तुलना करते समय रेस कंडीशन को ठीक किया गया b/111591017
  • PagedList.loadAround() अब इंडेक्स अमान्य होने पर IndexOutOfBoundsException दिखाता है. इससे पहले, यह किसी अन्य अपवाद की वजह से क्रैश हो सकता था.
  • हमने एक ऐसी समस्या को ठीक किया है जिसमें शुरुआती लोड का साइज़ बहुत छोटा होने और डेटा में कोई बदलाव न होने की वजह से, आगे की लोडिंग नहीं होती थी b/113122599

वर्शन 2.0.0

वर्शन 2.0.0

1 अक्टूबर, 2018

पेजिंग 2.0.0 को एक बग फ़िक्स के साथ रिलीज़ किया गया है.

गड़बड़ियां ठीक की गईं

  • PositionalDataSource और प्लेसहोल्डर b/114635383 का इस्तेमाल करके बहुत तेज़ी से स्क्रोल करने पर, क्रैश होने की समस्या को ठीक किया गया.

वर्शन 2.0.0-beta01

2 जुलाई, 2018

गड़बड़ियां ठीक की गईं

  • कुछ मामलों में, पहले से मौजूद कॉन्टेंट के गायब होने की समस्या ठीक की गई (प्लेसहोल्डर बंद हैं, PositionalDataSource) b/80149146
  • (1.0.1 में पहले ही रिलीज़ हो चुका है) क्रैश होने की उन समस्याओं को ठीक किया गया है जिनमें PagedListAdapter और AsyncPagedListDiffer, मूव इवेंट के बारे में सूचना नहीं दे पाते थे. b/110711937

AndroidX से पहले की डिपेंडेंसी

AndroidX से पहले के Paging के वर्शन के लिए, ये डिपेंडेंसी शामिल करें:

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

वर्शन 1.0.1

वर्शन 1.0.1

26 जून, 2018

पेजिंग 1.0.1 को runtime में एक बग फ़िक्स के साथ रिलीज़ किया गया है. हमारा सुझाव है कि आप स्थिरता के लिए 1.0.1 का इस्तेमाल करें. Paging RxJava2 1.0.1 भी रिलीज़ किया गया है. यह 1.0.0-rc1 के जैसा ही है.

गड़बड़ियां ठीक की गईं

  • उन क्रैश को ठीक किया गया है जिनमें PagedListAdapter और AsyncPagedListDiffer, मूव इवेंट का सिग्नल नहीं दे पाते थे. b/110711937

RxJava2 वर्शन 1.0.0

RxJava2 वर्शन 1.0.0-rc1

16 मई, 2018

Paging RxJava2 � release candidate में जा रहा है. इसमें शुरुआती ऐल्फ़ा वर्शन के मुकाबले कोई बदलाव नहीं किया गया है.1.0.0-rc1

वर्शन 1.0.0

वर्शन 1.0.0-rc1

19 अप्रैल, 2018 पेजिंग रिलीज़ कैंडिडेट

पेजिंग 1.0.0 रिलीज़ के लिए, हमें कोई और समस्या नहीं मिली है. साथ ही, कोई नई सुविधा भी शेड्यूल नहीं की गई है. 1.0.0-rc1 का इस्तेमाल करने के लिए, कृपया अपने प्रोजेक्ट अपग्रेड करें. साथ ही, इसे बेहतर बनाने में हमारी मदद करें, ताकि हम एक बेहतरीन 1.0.0 लॉन्च कर सकें.

इस रिलीज़ में कोई बदलाव नहीं किया गया है. यह 1.0.0-beta1 के जैसा ही है.

वर्शन 1.0.0-beta1

5 अप्रैल, 2018

पेजिंग की सुविधा, रिलीज़ कैंडिडेट के तौर पर उपलब्ध होने से पहले कुछ समय के लिए बीटा वर्शन में उपलब्ध होगी. हम Paging 1.0 के लिए, एपीआई में और बदलाव करने की योजना नहीं बना रहे हैं. साथ ही, एपीआई में किसी भी तरह के बदलाव के लिए, ज़रूरी शर्तें बहुत ज़्यादा हैं.

Paging के लिए Alpha RxJava2 का सपोर्ट, एक अलग वैकल्पिक मॉड्यूल (android.arch.paging:rxjava2:1.0.0-alpha1) के तौर पर रिलीज़ किया गया है. यह कुछ समय के लिए अलग से वर्शन किया जाएगा, ताकि इसे बेहतर बनाया जा सके.

यह नई लाइब्रेरी, LivePagedListBuilder के लिए RxJava2 का विकल्प उपलब्ध कराती है. यह Observable और Flowable बना सकती है. साथ ही, Executor के बजाय Scheduler लेती है:

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

नई सुविधाएं

  • android.arch.paging:rxjava2 नए आर्टफ़ैक्ट के ज़रिए RxPagedListBuilder को जोड़ा गया है.

एपीआई में हुए बदलाव

  • बिल्डर में एक्ज़ीक्यूटर की भूमिका के बारे में ज़्यादा जानकारी देने के लिए, एपीआई में बदलाव किए गए हैं:

    • setBackgroundThreadExecutor() का नाम बदलकर setFetchExecutor() किया गया (PagedList.Builder और LivePagedListBuilder में)

    • setMainThreadExecutor() का नाम बदलकर setNotifyExecutor() (PagedList.Builder में) किया गया.

  • PagedList.mCallbacks के सदस्यों के लिए, निजी तौर पर लॉक करने की सुविधा ठीक की गई.

गड़बड़ियां ठीक की गईं

  • LivePagedListBuilder, Arch Components IO थ्रेड पूल के बजाय, तय किए गए एक्ज़ीक्यूटर पर शुरुआती PagedList लोड को ट्रिगर करता है.

  • इंटरनल DataSource रैपर में अमान्य करने के व्यवहार को ठीक किया गया है. इनका इस्तेमाल DataSource.map को लागू करने के साथ-साथ, प्लेसहोल्डर-बंद PositionalDataSource लोडिंग के लिए किया जाता है b/77237534

वर्शन 1.0.0-alpha7

21 मार्च, 2018

पेजिंग 1.0.0-alpha7 को Lifecycles 1.1.1 के साथ रिलीज़ किया गया है. Paging alpha7, ऊपर बताई गई Function क्लास के मूव होने पर निर्भर करता है. इसलिए, आपको lifecycle:runtime डिपेंडेंसी को android.arch.lifecycle:runtime:1.1.1 पर अपडेट करना होगा.

पेजिंग alpha7 को बीटा वर्शन से पहले की आखिरी रिलीज़ के तौर पर प्लान किया गया है.

एपीआई में हुए बदलाव

  • DataSource.LoadParams ऑब्जेक्ट में अब एक सार्वजनिक कंस्ट्रक्टर है और DataSource.LoadCallback ऑब्जेक्ट अब ऐब्स्ट्रैक्ट हैं. इससे, मॉक कॉलबैक के साथ DataSource को रैप किया जा सकता है या सीधे तौर पर DataSource की जांच की जा सकती है. b/72600421
  • DataSource और DataSource.Factory के लिए मैपर
    • map(Function<IN,OUT>) की मदद से, DataSource से लोड किए गए नतीजों को बदला, रैप किया या सजाया जा सकता है.
    • mapByPage(<List<IN>,List<OUT>>), बैच प्रोसेसिंग के लिए भी ऐसा ही करता है. उदाहरण के लिए, अगर SQL से लोड किए गए आइटम को किसी अन्य डेटाबेस से क्वेरी करने की ज़रूरत है, तो इसे बैच के तौर पर किया जा सकता है.
  • PagedList#getDataSource() को सुविधा के तौर पर जोड़ा गया b/72611341
  • एपीआई से, बंद की गई सभी क्लास हटा दी गई हैं. इनमें recyclerview.extensions पैकेज और LivePagedListProvider के बचे हुए हिस्से भी शामिल हैं.
  • DataSource.Factory को इंटरफ़ेस से ऐब्स्ट्रैक्ट क्लास में बदल दिया गया है, ताकि मैप की सुविधा चालू की जा सके.

गड़बड़ियां ठीक की गईं

  • बिल्डर को फ़ाइनल के तौर पर बदला गया. b/70848565
  • Room DataSource को लागू करने से जुड़ी समस्या को अब ठीक कर दिया गया है, ताकि मल्टी-टेबल क्वेरी को हैंडल किया जा सके. यह सुधार Room 1.1.0-beta1 में शामिल है. इसके बारे में ऊपर बताया गया है.
  • उस गड़बड़ी को ठीक किया गया है जिसमें प्लेसहोल्डर चालू होने पर, PositionalDataSource के लिए BoundaryCallback.onItemAtEndLoaded को ट्रिगर नहीं किया जाता था. ऐसा तब होता था, जब कुल साइज़, पेज के साइज़ का पूरा-पूरा मल्टीपल होता था.

वर्शन 1.0.0-alpha5

22 जनवरी, 2018

गड़बड़ियां ठीक की गईं

  • प्लेसहोल्डर बंद होने पर पेज लोड होने की समस्या ठीक की गई b/70573345
  • IllegalArgumentException गड़बड़ी b/70360195 का पता लगाने के लिए अतिरिक्त लॉगिंग की गई (और Room-साइड फ़िक्स का अनुमान लगाया गया)
  • Javadoc के सैंपल कोड से जुड़ी समस्याएं ठीक की गईं b/70411933, b/71467637