पृष्ठांकन

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

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

सह-प्रॉडक्ट रिलीज़ किया गया जांचा और परखा हुआ वर्शन रिलीज़ कैंडिडेट बीटा रिलीज़ ऐल्फ़ा रिलीज़
paging-* 3.3.5 - - -
paging-compose 3.3.5 - - -
इस लाइब्रेरी को आखिरी बार 11 दिसंबर, 2024 को अपडेट किया गया था

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

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

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

ग्रूवी

dependencies {
  def paging_version = "3.3.2"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.3.2"

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

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

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

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

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

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

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

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

सुझाव

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

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

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

वर्शन 3.3

वर्शन 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 वर्शन में ये कमिट शामिल हैं.

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

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

वर्शन 3.3.2

7 अगस्त, 2024

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

नई सुविधाएं

  • paging-common और paging-testing में, Kotlin-मल्टीप्लैटफ़ॉर्म के नए टारगेट जोड़े गए हैं: watchos, tvos, और linuxArm64 (90c9768), (53e0eca)

वर्शन 3.3.1

24 जुलाई, 2024

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

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

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

वर्शन 3.3.0

14 मई, 2024

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

3.2.0 के बाद किए गए ज़रूरी बदलाव

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

Kotlin मल्टीप्लैटफ़ॉर्म के साथ काम करना

पेजिंग अब Kotlin Multiplatform के साथ काम करने वाले आर्टफ़ैक्ट शिप करती है. इसकी वजह यह है कि CashApp के multiplatform-paging प्रोजेक्ट से अपस्ट्रीम किए गए काम का ज़्यादातर हिस्सा इस्तेमाल किया गया है.

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

वर्शन 3.3.0-rc01

1 मई, 2024

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

वर्शन 3.3.0-beta01

3 अप्रैल, 2024

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

वर्शन 3.3.0-alpha05

20 मार्च, 2024

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

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

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

वर्शन 3.3.0-alpha04

6 मार्च, 2024

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

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

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

वर्शन 3.3.0-alpha03

7 फ़रवरी, 2024

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

नई सुविधाएं

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

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

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

वर्शन 3.3.0-alpha02

20 सितंबर, 2023

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

Kotlin मल्टीप्लैटफ़ॉर्म के साथ काम करना

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

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

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

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

बाहरी योगदान

वर्शन 3.3.0-alpha01

20 सितंबर, 2023

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

वर्शन 3.2

वर्शन 3.2.1

6 सितंबर, 2023

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

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

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

वर्शन 3.2.0

26 जुलाई, 2023

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

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

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

वर्शन 3.2.0-rc01

21 जून, 2023

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

बाहरी योगदान

  • Veyndan, पेजिंग को Android/JVM से अलग करने में योगदान देने के लिए धन्यवाद. (#553, #554, #555, #559)

वर्शन 3.2.0-beta01

7 जून, 2023

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

पेजिंग कंपोज

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

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

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

वर्शन 3.2.0-alpha06

24 मई, 2023

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

नई सुविधाएं

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

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

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

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

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

वर्शन 3.2.0-alpha05

3 मई, 2023

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

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

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

दस्तावेज़ से जुड़े सुधार

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

बाहरी योगदान

वर्शन 3.2.0-alpha04

8 फ़रवरी, 2023

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

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

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

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

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

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

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

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

वर्शन 3.2.0-alpha03

24 अक्टूबर, 2022

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

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

इस रिलीज़ में एक नया आर्टफ़ैक्ट शामिल है: paging-testing. यह आर्टफ़ैक्ट, आपके ऐप्लिकेशन की हर लेयर की यूनिट टेस्टिंग और पेजिंग के साथ उसके इंटिग्रेशन के लिए डिज़ाइन किए गए एपीआई उपलब्ध कराता है.

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

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

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

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

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

वर्शन 3.2.0-alpha02

10 अगस्त, 2022

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

नई सुविधाएं

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

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

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

वर्शन 3.2.0-alpha01

1 जून, 2022

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

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

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

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

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

बाहरी योगदान

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

वर्शन 3.1

वर्शन 3.1.1

9 मार्च, 2022

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

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

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

वर्शन 3.1.0

17 नवंबर, 2021

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

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

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

वर्शन 3.1.0-rc01

3 नवंबर, 2021

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

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

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

वर्शन 3.1.0-beta01

13 अक्टूबर, 2021

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

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

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

वर्शन 3.1.0-alpha04

29 सितंबर, 2021

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

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

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

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

  • LoadStates के लिए, endOfPaginationReached अब हमेशा LoadType.REFRESH के लिए false होता है. पहले, 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. अगर PagingData से कोई CombinedLoadStates नहीं मिला है, तो .loadStateFlow पर नया loadState listener या नया कलेक्टर रजिस्टर करने पर, मौजूदा वैल्यू तुरंत नहीं निकलेगी. ऐसा तब हो सकता है, जब कोई कलेक्टर या लिसनर, PagingData सबमिट होने से पहले ही सुनना शुरू कर दे. (I1a748)

वर्शन 3.1.0-alpha03

21 जुलाई, 2021

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

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

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

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

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

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

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

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

वर्शन 3.1.0-alpha02

1 जुलाई, 2021

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

नई सुविधाएं

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

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

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

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

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

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

वर्शन 3.1.0-alpha01

2 जून, 2021

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

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

  • paging-rxjava3 की क्लास अब androidx.paging.rxjava3 पैकेज में मौजूद हैं, ताकि वे paging-rxjava2 (Ifa7f6) से मेल न खाएं

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

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

बाहरी योगदान

  • rxjava3 आर्टफ़ैक्ट (Id1ce2, b/182497591) में, अब काम न करने वाले PagedList के साथ काम करने वाले एपीआई जोड़े गए

Paging Compose का वर्शन 1.0.0

वर्शन 1.0.0-alpha20

24 मई, 2023

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

नई सुविधाएं

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

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

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

वर्शन 1.0.0-alpha19

3 मई, 2023

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

सभी लेज़ी लेआउट के साथ काम करना

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

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

इसका मतलब है कि LazyVerticalGrid के साथ काम करने वाला टैग कुछ ऐसा दिखेगा:

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

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

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

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

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

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

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

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

वर्शन 1.0.0-alpha18

8 फ़रवरी, 2023

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

वर्शन 1.0.0-alpha17

24 अक्टूबर, 2022

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

नई सुविधाएं

  • collectLazyPagingItems को कॉल करते समय, कस्टम CoroutineContext के लिए सहायता जोड़ें. (I7a574, b/243182795, b/233783862)

वर्शन 1.0.0-alpha16

10 अगस्त, 2022

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

नई सुविधाएं

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

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

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

वर्शन 1.0.0-alpha15

1 जून, 2022

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

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

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

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

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

वर्शन 1.0.0-alpha14

13 अक्टूबर, 2021

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

वर्शन 1.0.0-alpha13

29 सितंबर, 2021

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

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

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

वर्शन 1.0.0-alpha12

21 जुलाई, 2021

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

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

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

वर्शन 1.0.0-alpha11

30 जून, 2021

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

वर्शन 1.0.0-alpha10

2 जून, 2021

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

वर्शन 1.0.0-alpha09

18 मई, 2021

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

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

  • LazyPagingItems के itemCount और आइटम पाने वाले फ़ंक्शन को अब निगरानी में रखा जा सकता है. इससे, LazyVerticalGrid के साथ भी इसका इस्तेमाल किया जा सकता है (Ie2446, b/171872064, b/168285687)

Compose के साथ काम करने वाले डिवाइस

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

वर्शन 1.0.0-alpha08

24 फ़रवरी, 2021

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

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

वर्शन 1.0.0-alpha07

10 फ़रवरी, 2021

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

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

वर्शन 1.0.0-alpha06

28 जनवरी, 2021

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

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

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

वर्शन 1.0.0-alpha05

13 जनवरी, 2021

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

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

वर्शन 1.0.0-alpha04

16 दिसंबर, 2020

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

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

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

वर्शन 1.0.0-alpha03

2 दिसंबर, 2020

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

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

वर्शन 1.0.0-alpha02

11 नवंबर, 2020

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

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

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

वर्शन 1.0.0-alpha01

28 अक्टूबर, 2020

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

नई सुविधाएं

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

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

वर्शन 3.0.1

वर्शन 3.0.1

21 जुलाई, 2021

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

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

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

वर्शन 3.0.0

वर्शन 3.0.0

5 मई, 2021

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

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

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

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

वर्शन 3.0.0-rc01

21 अप्रैल, 2021

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

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

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

वर्शन 3.0.0-beta03

24 मार्च, 2021

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

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

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

वर्शन 3.0.0-beta02

10 मार्च, 2021

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

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

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

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

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

वर्शन 3.0.0-beta01

10 फ़रवरी, 2021

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

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

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

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

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

वर्शन 3.0.0-alpha13

27 जनवरी, 2021

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

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

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

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

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

वर्शन 3.0.0-alpha12

13 जनवरी, 2021

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

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

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

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

  • एक गड़बड़ी को ठीक किया गया है. इसमें, पेजेशन की प्रक्रिया पूरी हो जाने पर, adapter.refresh() के दौरान RemoteMediator.load() को कॉल नहीं किया जाता था.

वर्शन 3.0.0-alpha11

16 दिसंबर, 2020

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

नई सुविधाएं

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

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

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

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

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

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

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

वर्शन 3.0.0-alpha10

2 दिसंबर, 2020

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

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

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

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

    (Ib5570, b/173530908)

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

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

बाहरी योगदान

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

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

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

वर्शन 3.0.0-alpha09

11 नवंबर, 2020

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

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

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

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

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

वर्शन 3.0.0-alpha08

28 अक्टूबर, 2020

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

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

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

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

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

वर्शन 3.0.0-alpha07

1 अक्टूबर, 2020

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

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

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

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

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

बाहरी योगदान

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

वर्शन 3.0.0-alpha06

2 सितंबर, 2020

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

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

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

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

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

वर्शन 3.0.0-alpha05

19 अगस्त, 2020

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

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

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

बाहरी योगदान

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

वर्शन 3.0.0-alpha04

5 अगस्त, 2020

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

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

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

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

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

बाहरी योगदान

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

वर्शन 3.0.0-alpha03

22 जुलाई, 2020

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

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

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

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

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

वर्शन 3.0.0-alpha02

24 जून, 2020

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

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

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

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

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

वर्शन 3.0.0-alpha01

10 जून, 2020

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

पेजिंग लाइब्रेरी को 3.0 पर अपडेट किया गया है, ताकि कई नई सुविधाएं चालू की जा सकें.

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

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

  • फ़िलहाल, पेजिंग 3 के लिए javadocs उपलब्ध नहीं हैं. इस दौरान, कृपया ऊपर दिए गए लिंक या Kotlin दस्तावेज़ों का इस्तेमाल करें. (b/158614050)

वर्शन 2.1.2

वर्शन 2.1.2

18 मार्च, 2020

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

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

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

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

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

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

वर्शन 2.1.1

वर्शन 2.1.1

18 दिसंबर, 2019

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

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

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

वर्शन 2.1.0

वर्शन 2.1.0

25 जनवरी, 2019

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

वर्शन 2.1.0-rc01

6 दिसंबर, 2018

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

वर्शन 2.1.0-beta01

1 नवंबर 2018

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

वर्शन 2.1.0-alpha01

12 अक्टूबर, 2018

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

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

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

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

dependencies {
    def paging_version = "1.0.0"

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

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

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

वर्शन 1.0.1

वर्शन 1.0.1

26 जून, 2018

पेजिंग 1.0.1 को runtime में एक गड़बड़ी ठीक करने के साथ रिलीज़ किया गया है. हमारा सुझाव है कि आप 1.0.1 का इस्तेमाल करें, ताकि आपका ऐप्लिकेशन बिना किसी रुकावट के काम करता रहे. पेजिंग RxJava2 1.0.1 भी रिलीज़ कर दिया गया है. यह 1.0.0-rc1 जैसा ही है.

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

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

RxJava2 का वर्शन 1.0.0

RxJava2 वर्शन 1.0.0-rc1

16 मई, 2018

पेजिंग RxJava2 1.0.0-rc1 को रिलीज़ कैंडिडेट के तौर पर रिलीज़ किया जा रहा है. इसमें शुरुआती अल्फा वर्शन में किए गए बदलावों को शामिल नहीं किया गया है.

वर्शन 1.0.0

वर्शन 1.0.0-rc1

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

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

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

वर्शन 1.0.0-beta1

5 अप्रैल, 2018

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

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

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

Kotlin

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

Java

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

नई सुविधाएं

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

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

  • एपीआई में किए गए बदलाव, ताकि बिल्डर में एक्ज़ीक्यूटर की भूमिका को साफ़ तौर पर बताया जा सके:

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

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

  • PagedList.mCallbacks सदस्य को निजी के तौर पर सेट किया गया.

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

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

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

वर्शन 1.0.0-alpha7

21 मार्च, 2018

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

पेजिंग alpha7 को बीटा वर्शन में लॉन्च करने से पहले, इसे फ़ाइनल रिलीज़ के तौर पर लॉन्च किया जाएगा.

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

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

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

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

वर्शन 1.0.0-alpha5

22 जनवरी, 2018

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

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