पृष्ठांकन

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

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

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

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

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 में ये बदलाव शामिल हैं.

नई सुविधाएं

वर्शन 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)

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

वर्शन 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 को अपडेट करते समय, 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 में ये बदलाव शामिल हैं.

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

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

बाहरी योगदान

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

वर्शन 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 या गड़बड़ी की स्थिति में नहीं आ जाता.
  • 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)

बाहरी योगदान

वर्शन 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 को टेस्ट में पेजर को पास किया जा सकता है
    • 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 में ये बदलाव शामिल हैं.

बाहरी योगदान

  • 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 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) के क्रम से मेल खाएं
  • पेजिंग-टेस्टिंग के लिए, लैंबडा टाइप () -> 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>> पर मौजूद 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 क्लास शामिल है. इसकी मदद से, अपने कस्टम 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 अब हमेशा 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) के साथ टकराव न करें

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

  • उस समस्या को ठीक किया गया है जिसमें पेजिंग लाइब्रेरी, कभी-कभी 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 में रैप करें. उदाहरण के लिए,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 से कनेक्ट करने के लिए किया जाता है. अब ये दोनों, 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 DataSource API का इस्तेमाल करते समय, कभी-कभी 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 }
    

    (Ib5570, b/173530908)

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

  • 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 की नई सुविधाएं

मौजूदा समस्याएं

  • 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/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 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