ترقيم الصفحات

تسهّل عليك Paging Library تحميل البيانات تدريجيًا وبشكل سلس ضمن RecyclerView في تطبيقك.

يسرد هذا الجدول جميع العناصر في المجموعة androidx.paging.

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
paging-* 3.3.6 - - 3.4.0-alpha01
paging-compose 3.3.6 - - 3.4.0-alpha01
تم إجراء آخر تعديل على هذه المكتبة في: 2 يوليو 2025

تعريف التبعيات

لإضافة تبعية على مكتبة Paging، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.

أضِف التبعيات الخاصة بالعناصر التي تحتاج إليها في ملف 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-alpha01"
}

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-alpha01")
}

للحصول على معلومات حول استخدام إضافات Kotlin، راجِع مستندات KTX.

لمزيد من المعلومات حول العناصر التابعة، يُرجى الاطّلاع على إضافة عناصر تابعة للإنشاء.

الملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء مشكلة جديدة

يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.

الإصدار 3.4

الإصدار 3.4.0-alpha01

‫2 يوليو 2025

تم طرح androidx.paging:paging-*:3.4.0-alpha01. يحتوي الإصدار 3.4.0-alpha01 على عمليات الدمج هذه.

الميزات الجديدة

إصلاح الأخطاء

  • لن يتم بعد الآن عرض استثناءات من PagingLogger عند استدعاء اختبارات الوحدات في Android للإصدار 3.3 أو إصدار أحدث من مكتبة Paging (Ia9400، b/331684448).
  • تم إصلاح الخطأ الذي كان يؤدي إلى ظهور RecyclerView IndexOutOfBoundsException عند تنقّل المستخدم أثناء تعديل RecyclerView (Id1f16، b/381024738)
  • تم إصلاح الخطأ الذي تسبّب في عدم إمكانية تشغيل المزيد من عمليات التحميل عند إعادة التحميل أثناء التمرير. (I60ca5، b/352586078)
  • تم إصلاح مشكلة التعطُّل عند التمرير أثناء إعادة تحميل عناصر التقسيم إلى صفحات. (I8c65a، b/347649763)

الإصدار 3.3

الإصدار 3.3.6

‫12 فبراير 2025

تم طرح androidx.paging:paging-*:3.3.6. يحتوي الإصدار 3.3.6 على عمليات الدمج هذه.

إصلاح الأخطاء

  • سيتم الآن تخزين إشارات إعادة المحاولة وإعادة التحميل التي يتم إرسالها أثناء عملية إعادة تحميل أولية، وإعادة إرسالها تلقائيًا بعد أن يصبح عارض التصفُّح جاهزًا.

المساهمة الخارجية

  • نشكر إيفا على إرسال إصلاح الخطأ (#754)

الإصدار 3.3.5

‫11 ديسمبر 2024

تم طرح androidx.paging:paging-*:3.3.5. يحتوي الإصدار 3.3.5 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح الخطأ الذي كان يتسبّب في عرض RecyclerView للرسالة IndexOutOfBoundsException عندما يتصفّح المستخدم أثناء تعديل RecyclerView. (Id1f16، b/381024738)

الإصدار 3.3.4

‫13 نوفمبر 2024

تم طرح androidx.paging:paging-*:3.3.4. يحتوي الإصدار 3.3.4 على عمليات الدمج هذه.

إصلاح الأخطاء

  • لن تؤدي اختبارات الوحدة على Android التي تستخدم الإصدار 3.3 أو الإصدارات الأحدث من مكتبة Paging إلى ظهور خطأ مثل 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 أو واجهات برمجة التطبيقات المستندة إليه، مثل PagingDataAdapter المستخدَم مع RecyclerView. (I60ca5، b/352586078)
  • تم إصلاح عُطل يحدث عند إزالة عناصر من مصدر البيانات الأساسي أثناء التمرير في RecyclerView باستخدام PagingDataAdapter أو AsyncPagingDataDiffer. (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.
  • تمت إضافة طريقتَي مساعدة جديدتَين LoadStates وCombinedLoadStates في hasError وisIdle للتحقّق مما إذا كان LoadStates في حالة Error أو NotLoading، على التوالي. تمت أيضًا إضافة طريقة جديدة awaitNotLoading() لإنشاء دوال برمجية بلغة Kotlin على Flow<CombinedLoadStates> تنتظر إلى أن يتم تحميل البيانات في حالة NotLoading أو حالة الخطأ.
  • ترسل السمة PagingData.empty() الآن حالات NotLoading تلقائيًا ما لم يتم تمرير LoadStates مخصّصة إلى أداة الإنشاء الخاصة بها. يختلف هذا عن السلوك الحالي الذي لا يتم فيه إرسال LoadStates عند إرساله إلى PagingDataAdapter أو يتم فيه إرسال حالات التحميل عند تجميعها كـ LazyPagingItems. عندما يتم جمعها كـ LazyPagingItems، ستعرض الآن أيضًا قائمة فارغة فور الإنشاء الأولي.

التوافق مع Kotlin Multiplatform

تتوفّر الآن عناصر Paging متوافقة مع Kotlin Multiplatform، ويعود الفضل في ذلك إلى حدّ كبير إلى العمل الذي تمّت ترقيته من مشروع multiplatform-paging في CashApp.

  • نقلت paging-common جميع واجهات برمجة التطبيقات في Paging 3 إلى common، وأصبحت الآن متوافقة مع jvm وiOS بالإضافة إلى Android.
  • تم نقل رمز paging-testing إلى common، وأصبح متوافقًا الآن مع jvm وiOS بالإضافة إلى Android.
  • نقلت paging-compose الرمز البرمجي إلى common وأصدرت عنصر Android، ما يتيح التوافق مع الأنظمة الأساسية المتعددة في androidx.compose.
  • ستبقى "paging-runtime" و"paging-guava" و"paging-rxjava2" و"paging-rxjava3" متاحة على أجهزة Android فقط.

الإصدار 3.3.0-rc01

‫1 مايو 2024

تم إصدار androidx.paging:paging-*:3.3.0-rc01 بدون أي تغييرات في الإصدار 3.3.0-beta01 من Paging. يحتوي الإصدار 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 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • تستخدم مكتبة Paging الآن التعليق التوضيحي @MainThread AndroidX Annotation للرمز البرمجي الشائع. (I78f0d، b/327682438)

الإصدار 3.3.0-alpha04

‫6 مارس 2024

تم طرح androidx.paging:paging-*:3.3.0-alpha04. يحتوي الإصدار 3.3.0-alpha04 على عمليات الدمج هذه.

إصلاح الأخطاء

  • تم إصلاح أخطاء بسيطة في المستندات متعلقة بإضافة توافق Kotlin مع الأنظمة الأساسية المتعددة. (aosp/2950785)

الإصدار 3.3.0-alpha03

‫7 فبراير 2024

تم طرح androidx.paging:paging-*:3.3.0-alpha03. يحتوي الإصدار 3.3.0-alpha03 على عمليات الإيداع هذه.

الميزات الجديدة

  • PagingDataPresenter هو الآن صف علني. يمكن الآن إنشاء أدوات العرض المتوافقة مع منصات متعددة استنادًا إلى PagingDataPresenter بدلاً من الحاجة إلى واجهات برمجة تطبيقات داخلية خاصة بالتقسيم إلى صفحات أو paging-runtime AsyncPagingDataDiffer. (Id1f74، b/315214786)
  • تمت إضافة طريقتَي المساعدة الجديدتَين LoadStates وCombinedLoadStates للتحقّق مما إذا كانت LoadStates في حالة Error أو NotLoading. تمت أيضًا إضافة واجهة برمجة تطبيقات جديدة تنتظر LoadStateFlow إلى أن يتم تحميل البيانات في إحدى الحالتين NotLoading أو "خطأ". (Id6c67)

تغيير السلوك

  • ترسل السمة PagingData.empty() الآن حالات NotLoading تلقائيًا ما لم يتم تمرير LoadStates مخصّصة إلى أداة الإنشاء الخاصة بها. يختلف هذا عن السلوك الحالي الذي لا يتم فيه إرسال LoadStates عند إرساله إلى PagingDataAdapter أو يتم فيه إرسال حالات التحميل عند تجميعها كـ 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، ويعود الفضل في ذلك إلى حدّ كبير إلى العمل الذي تمّت ترقيته من مشروع multiplatform-paging في CashApp. سيسمح لنا ذلك بتجنُّب الاختلاف بين مستودعَين والحفاظ على توافقهما.

  • نقلت paging-common جميع واجهات برمجة التطبيقات في Paging 3 إلى common، وأصبحت الآن متوافقة مع jvm وiOS بالإضافة إلى Android.
  • تم نقل رمز paging-testing إلى common، وأصبح متوافقًا الآن مع jvm وiOS بالإضافة إلى Android.
  • نقلت paging-compose الرمز البرمجي إلى common وأصدرت عنصر Android، ما يتيح التوافق مع الأنظمة الأساسية المتعددة في androidx.compose.
  • ستبقى "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() الخاصة بعنصر Paging Testing عند تمرير Flow تم إنشاؤه باستخدام PagingData.from(List)، لأنّ asSnapshot() لن تتضمّن أي معلومات حول وقت انتهاء التحميل (على عكس التحميل الزائد PagingData.from(List, LoadStates)). لا يعمل هذا الحلّ إلا مع عمليات سير العمل التي يمكن إكمالها (مثل 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 في MutableStateFlow (مثل MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). مرِّر هذا المسار إلى عناصر @Preview القابلة للإنشاء كعنصر استقبال collectAsLazyPagingItems() للمعاينة.
    • إتاحة جميع التصاميم الكسولة، مثل LazyVerticalGrid وHorizontalPager، بالإضافة إلى المكوّنات الكسولة المخصّصة من مكتبتَي Wear وTV تم تحقيق ذلك من خلال طريقتَي الإضافة الجديدتَين LazyPagingItems itemKey وitemContentType على مستوى أدنى، ما يساعدك في تنفيذ المَعلمتَين key وcontentType في واجهات برمجة التطبيقات العادية items المتوفّرة حاليًا في LazyColumn وLazyVerticalGrid، بالإضافة إلى ما يعادلهما في واجهات برمجة التطبيقات، مثل HorizontalPager.
    • تم إيقاف items(lazyPagingItems) وitemsIndexed(lazyPagingItems) اللذين يتوافقان مع LazyListScope فقط.
  • عنصر paging-testing جديد يوفّر واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من تطبيقك ودمجها مع مكتبة Paging بشكل منفصل. على سبيل المثال، يشمل ذلك
    • فئة TestPager التي تتيح لك التحقّق من صحة سلوك عملية تنفيذ PagingSource المخصّصة بشكل مستقل عن Pager وواجهة المستخدم الحقيقية.
    • واجهات برمجة التطبيقات ‎asPagingSourceFactory لتحويل Flow<List<Value>> أو List<Value> ثابت إلى PagingSourceFactory يمكن تمريره إلى أداة عرض الصفحات في الاختبارات
    • asSnapshot إضافة Kotlin على Flow<PagingData<Value>>، ما يؤدي إلى ترجمة Flow<PagingData<Value>> إلى List<Value> مباشرةً تتيح لك السمة asSnapshot lambda محاكاة واجهة المستخدم لتطبيقك من خلال واجهات برمجة التطبيقات، مثل scrollTo أو appendScrollWhile، حتى تتمكّن من التحقّق من صحة لقطة البيانات في أي وقت في مجموعة البيانات المقسّمة إلى صفحات.
  • تمت إضافة سجلّات تلقائية لعرض معلومات تصحيح أخطاء التقسيم على مستويَين: VERBOSE وDEBUG. يمكن تفعيل السجلات باستخدام الأمر adb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ينطبق ذلك على كلّ من "تقسيم المحتوى إلى صفحات باستخدام طرق العرض" أو "تقسيم المحتوى إلى صفحات باستخدام Compose".
  • تمت إضافة أدوات إنشاء للفئتين PagingDataAdapter وAsyncPagingDataDiffer تقبل CoroutineContext بدلاً من CoroutineDispatcher.
  • تمت إضافة واجهة PagingSourceFactory وظيفية جديدة توفّر مساحة واجهة برمجة تطبيقات أكثر وضوحًا من تعبيرات lambda السابقة () -> PagingSource. يمكن استخدام هذا المصنع لإنشاء مثيل من Pager.

الإصدار 3.2.0-rc01

‫21 حزيران (يونيو) 2023

تم طرح androidx.paging:paging-*:3.2.0-rc01. يحتوي الإصدار 3.2.0-rc01 على عمليات الإيداع هذه.

المساهمة الخارجية

  • نشكر Veyndan على المساهمة في إبعاد مكتبة Paging عن تفاصيل Android/JVM. (#553 و#554 و#555 و#559)

الإصدار 3.2.0-beta01

‫7 يونيو 2023

تم طرح androidx.paging:paging-*:3.2.0-beta01. يحتوي الإصدار 3.2.0-beta01 على عمليات الإيداع هذه.

Paging Compose

  • أصبحت مكتبة Paging Compose مستقرة رسميًا. وبناءً على ذلك، تم تعديل الإصدار من 1.0.0-alpha20 ليتطابق الآن مع إصدار جميع عناصر Paging الأخرى.

تغييرات واجهة برمجة التطبيقات

  • تمت إزالة واجهتَي برمجة التطبيقات المتوقّفتَين items(LazyPagingItems) وitemsIndexed(LazyPagingItems) من مكتبة Paging Compose. راجِع ملاحظات إصدار 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 lambda الحالية. يمكن استخدام هذا المصنع لإنشاء مثيل من Pager. (I33165 وb/280655188)
  • تمت إضافة واجهة برمجة تطبيقات جديدة paging-testingList<Value>.asPagingSourceFactory() للحصول على PagingSourceFactory يتم تحميله فقط من قائمة بيانات غير قابلة للتغيير. يجب الاستمرار في استخدام الإضافة الحالية على Flow<List<Value>> لإجراء الاختبارات باستخدام أجيال متعددة من البيانات الثابتة. (Id34d1، b/280655188)

تغييرات واجهة برمجة التطبيقات

  • تم الآن إضافة التعليق التوضيحي @VisibleForTesting إلى جميع واجهات برمجة التطبيقات العامة في paging-testing لضمان استخدام هذه الواجهات في الاختبارات فقط. (I7db6e)
  • لم يعُد asSnapshot API يتطلّب إدخال CoroutineScope. يتم الآن استخدام السياق الموروث من النطاق الرئيسي تلقائيًا. (Id0a78، b/282240990)
  • تمت إعادة ترتيب مَعلمات الدالة الإنشائية TestPager لتتطابق بشكل بديهي مع ترتيب مَعلمات الدالة الإنشائية Pager الفعلية (I6185a)
  • تم نقل استخدام نوع lambda () -> PagingSource<Key, Value> في اختبارات التصفّح إلى النوع PagingSourceFactory<Key, Value>. (I4a950، b/280655188)

التغييرات في السلوك

  • لم يعُد هناك حاجة إلى أداة الإرسال الرئيسية لتشغيل asSnapshot اختبارات التقسيم إلى صفحات. ولن يؤدي ضبطه إلى إجراء أي تغييرات على سلوك الاختبار. (Ie56ea)

الإصدار 3.2.0-alpha05

‫3 مايو 2023

تم طرح androidx.paging:paging-*:3.2.0-alpha05. يحتوي الإصدار 3.2.0-alpha05 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تضبط واجهة برمجة التطبيقات Paging Testing API في asSnapshot الآن المَعلمة loadOperations تلقائيًا على تعبير lambda فارغ. يتيح ذلك استدعاء 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 لإنشاء pagingSourceFactory من Flow<List<Value>> سيتم توفيره إلى Pager. يمثّل كل List<Value>> صادر من Flow مجموعة من البيانات المقسّمة إلى صفحات. يسهّل ذلك إجراء اختبارات التقسيم على صفحات، مثلاً، PagingData عمليات التحويل عن طريق محاكاة مصدر بيانات يمكن لـ Pager جمع البيانات منه. (I6f230، b/235528239)
  • تم توسيع عنصر paging-testing ليشمل واجهات برمجة تطبيقات جديدة مناسبة للتحقّق من صحة البيانات الواردة في Flow<PagingData<T>>. يمكن استخدام ذلك، على سبيل المثال، لتأكيد ناتج Flow<PagingData<T>> من طبقة ViewModel.

    يتم ذلك من خلال إضافة asSnapshot Kotlin على Flow<PagingData<Value>>، ما يؤدي إلى تحويل Flow<PagingData<Value>> إلى List<Value> مباشر. تتيح لك الدالة lambda 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. يمكنك الاطّلاع على اختبار إجراءات Kotlin الفرعية على Android للحصول على مزيد من المعلومات. (I55fd2، I5bd26، I7ce34، I51f4d، I2249f، Id6223، Ic4bab، Ib29b9، Ic1238، I96def، b/235528239)

تغييرات واجهة برمجة التطبيقات

  • تم الآن وضع علامة بشكل صحيح على طلبات واجهة المستخدِم إلى getItem وpeek في AsyncPagingDataDiffer وPagingDataAdapter على أنّها قابلة للاستدعاء فقط في سلسلة التعليمات البرمجية الرئيسية. (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 وواجهة المستخدم الحقيقية التي تحتاج إليها عادةً لمحاكاة عملية الدمج الكاملة في Paging.

يجب اعتبار TestPager عنصرًا زائفًا، أي عنصرًا بديلًا للاختبار يحاكي التنفيذ الفعلي لـ Pager مع توفير مساحة سطح مبسطة لواجهة برمجة التطبيقات لاختبار PagingSource. هذه الواجهات هي واجهات برمجة تطبيقات suspend ويجب تشغيلها ضمن runTest كما هو موضّح في دليل اختبار إجراءات Kotlin الفرعية على Android.

يمكن العثور على مثال على استخدام واجهات برمجة التطبيقات هذه في اختبارات room-paging التي تمت إعادة تصميمها لاستخدام TestPager.

تغييرات واجهة برمجة التطبيقات

  • تتيح هذه السمة تكرارًا مناسبًا على LoadResult.Page.data من خلال LoadResult.Page.iterator(). يسمح ذلك بشكل غير مباشر باستخدام طريقة مكتبة Kotlin العادية flatten عند توفير List<LoadResult.Page>، مثل الخاصية pages الخاصة بـ PagingState التي يتم تمريرها إلى الطريقة 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)

إصلاح الأخطاء

  • تم إصلاح خطأ الدالة الإنشائية PagingDataDiffer غير المتوفّرة عند استخدام paging-common:3.2.0-alpha01 مع وقت التشغيل paging-runtime:3.1.1 أو إصدار أقدم.(b/235256201)

الإصدار 3.2.0-alpha01

‫1 يونيو 2022

تم طرح androidx.paging:paging-*:3.2.0-alpha01. يحتوي الإصدار 3.2.0-alpha01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة أدوات إنشاء للفئتين PagingDataAdapter وAsyncPagingDataDiffer تقبل CoroutineContext بدلاً من CoroutineDispatcher. (Idc878)
  • بشكلٍ تلقائي، لن تؤثر PagingData.from() وPagingData.empty() في CombinedLoadStates من جهة مقدّم العرض. تمت إضافة تحميل زائد جديد يسمح بتمرير sourceLoadStates وremoteLoadStates إلى أدوات الإنشاء هذه للحفاظ على السلوك الحالي لضبط LoadStates على أن يكون نهائيًا بالكامل (أي NotLoading(endOfPaginationReached = false))، مع إمكانية تضمين الولايات البعيدة أيضًا إذا لزم الأمر. في حال عدم اجتياز LoadStates، سيتم الاحتفاظ بقيمة CombinedLoadStates السابقة على جهاز مقدّم العرض عند تلقّي قيمة PagingData الثابتة. (Ic3ce5، b/205344028)

إصلاح الأخطاء

  • يتم الآن تحديد أولوية نتيجة PagingSource.getRefreshKey() بشكل صحيح على initialKey في الحالات التي تعرض فيها قيمة فارغة، ولكن تم ضبط قيمة غير فارغة لـ initialKey. (Ic9542، b/230391606)

المساهمة الخارجية

  • تم تعديل واجهة برمجة التطبيقات :compose:ui:ui-test (updateApi) بسبب نقل بيانات test-coroutines-lib (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 الآن false دائمًا مقابل LoadType.REFRESH لكل من PagingSource وRemoteMediator
    • تنتظر السمة LoadStates من Paging الآن قيمًا صالحة من كلّ من PagingSource وRemoteMediator قبل إرسالها إلى أسفل السلسلة. ستبدأ الأجيال الجديدة من PagingData دائمًا بشكل صحيح بـ Loading لحالة إعادة التحميل بدلاً من إعادة الضبط إلى NotLoading بشكل غير صحيح في بعض الحالات.
    • لم يعُد ".loadStateFlow" و".addLoadStateListener" في واجهات برمجة التطبيقات الخاصة بالمقدِّم يرسلان بشكل متكرّر CombinedLoadStates أولية يتم فيها دائمًا ضبط حالات الوسيط على null
  • يتم الآن إلغاء عمليات الإنشاء السابقة على الفور عند إبطالها أو إنشاء عمليات جديدة. لم يعُد من الضروري استخدام .collectLatest على Flow<PagingData>، ولكن لا يزال يُنصح بذلك.
  • تمت إضافة PagingSource.LoadResult.Invalid كنوع إرجاع جديد من PagingSource.load، ما يؤدي إلى تجاهل مكتبة Paging لأي طلبات تحميل معلّقة أو مستقبلية إلى PagingSource وإبطالها. تم تصميم نوع العرض هذا للتعامل مع البيانات التي قد تكون غير صالحة أو قديمة والتي يمكن عرضها من قاعدة البيانات أو الشبكة.
  • تمت إضافة واجهتَي برمجة التطبيقات .onPagesPresented و.addOnPagesUpdatedListener الخاصتَين بالمقدِّمين، واللتين يتم تشغيلهما بشكل متزامن أثناء عرض الصفحات في واجهة المستخدم. يمكن أن تحدث تعديلات على الصفحة في الحالات التالية:
    • يكتمل التحميل الأوّلي لجيل جديد من PagingData، بغض النظر عمّا إذا كان الجيل الجديد يتضمّن أي تغييرات على العناصر المعروضة. أي: سيؤدي الجيل الجديد الذي يكمل عملية التحميل الأولي بدون أي تحديثات لأنّ القائمة هي نفسها تمامًا إلى تشغيل وظيفة معاودة الاتصال هذه.
    • يتم إدراج صفحة، حتى إذا كانت الصفحة المُدرَجة لا تحتوي على أي عناصر جديدة.
    • تمت إزالة الصفحة، حتى لو كانت فارغة.

الإصدار 3.1.0-rc01

‫3 نوفمبر 2021

تم طرح androidx.paging:paging-*:3.1.0-rc01. يتضمّن الإصدار 3.1.0-rc01 عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة حالة السباق وتسريب الذاكرة في ‎ .cachedIn()‎ في الحالات التي أرسلت فيها Paging أحداث تحميل متعدّدة في اتجاه المصدر بينما لم تكن هناك أي مراقبات أو بين وقت تبديل مراقب إلى PagingData جديد. (Ib682e)

الإصدار 3.1.0-beta01

‫13 أكتوبر 2021

تم طرح androidx.paging:paging-*:3.1.0-beta01. يحتوي الإصدار 3.1.0-beta01 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح مشكلة كانت تؤدي إلى تجاهل العديد من عمليات الوصول السريع إلى العناصر عند تحديد 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 الآن false دائمًا بالنسبة إلى LoadType.REFRESH. في السابق، كان من الممكن أن تكون قيمة endOfPaginationReached هي true بالنسبة إلى RemoteMediator REFRESH، ولكن ليس بالنسبة إلى PagingSource. تم الآن دمج هذا السلوك لعرض false دائمًا، لأنّه لا يمكن أن يكون REFRESH نهائيًا، وتمت الآن إضافة توثيق له كجزء من عقد واجهة برمجة التطبيقات في LoadStates. عند تحديد ما إذا كان سيتم إنهاء التقسيم إلى صفحات، يجب دائمًا إجراء ذلك مع مراعاة اتجاهَي الإضافة APPEND أو الإضافة PREPEND. (I047b6)
  • تنتظر LoadStates من Paging الآن قيمًا صالحة من كل من PagingSource وRemoteMediator قبل إرسالها إلى أسفل السلسلة بين عمليات الإنشاء. يمنع ذلك الأجيال الجديدة من PagingData من إرسال NotLoading في CombinedLoadStates.source.refresh إذا كانت الحالة Loading من قبل، وستبدأ الأجيال الجديدة من PagingData الآن دائمًا بشكل صحيح بالحالة Loading للتحديث بدلاً من إعادة الضبط أولاً على NotLoading بشكل غير صحيح في بعض الحالات.

    يتم الآن إلغاء عمليات الإنشاء السابقة بشكل سريع عند إبطالها أو إنشاء عمليات جديدة. لن يكون من الضروري بعد الآن استخدام .collectLatest على Flow<PagingData>، ولكن لا يزال يُنصح بشدة بذلك. (I0b2b5، b/177351336، b/195028524)

  • لم يعُد .loadStateFlow و.addLoadStateListener في واجهات برمجة التطبيقات الخاصة بالعروض التقديمية يرسلان بشكل مكرّر CombinedLoadStates أوليًا يكون دائمًا في حالة null لوسطاء العرض وفي حالة NotLoading(endOfPaginationReached = false) للمصدر. ويعني هذا أنّ:

    1. سيتم دائمًا ملء حالات الوسيط إذا كنت تستخدم RemoteMediator.
    2. لن يؤدي تسجيل أداة معالجة loadState جديدة أو أداة تجميع جديدة في .loadStateFlow إلى إصدار القيمة الحالية على الفور إذا لم تتلقَّ CombinedLoadStates حقيقيًا من PagingData. يمكن أن يحدث ذلك إذا بدأ جامع البيانات أو أداة معالجة الحدث قبل إرسال PagingData. (I1a748)

الإصدار 3.1.0-alpha03

‫21 تموز (يوليو) 2021

تم طرح androidx.paging:paging-*:3.1.0-alpha03. يحتوي الإصدار 3.1.0-alpha03 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة نوع الإرجاع الثالث LoadResult.Invalid إلى PagingSource. عندما تعرض الدالة PagingSource.load النتيجة LoadResult.Invalid، ستتجاهل عملية التقسيم إلى صفحات البيانات التي تم تحميلها وستبطل PagingSource. تم تصميم نوع الإرجاع هذا للتعامل مع البيانات التي قد تكون غير صالحة أو قديمة والتي يمكن إرجاعها من قاعدة البيانات أو الشبكة.

    على سبيل المثال، إذا تمت الكتابة في قاعدة البيانات الأساسية ولكن لم يتم إبطال PagingSource في الوقت المناسب، قد تعرض نتائج غير متسقة إذا كان تنفيذها يعتمد على عدم قابلية مجموعة البيانات الأساسية التي يتم تحميلها منها للتغيير (مثل LIMIT OFFSET style db implementations). في هذه الحالة، يُنصح بالتحقّق من الإبطال بعد التحميل وعرض LoadResult.Invalid، ما يؤدي إلى تجاهل مكتبة Paging لأي طلبات تحميل معلّقة أو مستقبلية إلى PagingSource وإبطالها.

    يتوافق نوع الإرجاع هذا أيضًا مع واجهة برمجة التطبيقات Paging2 التي تستخدم LivePagedList أو RxPagedList. عند استخدام PagingSource مع واجهات برمجة التطبيقات PagedList في Paging2، يتم فصل PagedList على الفور، ما يؤدي إلى إيقاف المحاولات الإضافية لتحميل البيانات في PagedList هذه وتفعيل الإبطال في PagingSource.

    ‫LoadResult هي فئة محكمة الإغلاق، ما يعني أنّ هذا التغيير غير متوافق مع المصدر، وبالتالي فإنّ حالات الاستخدام التي تستخدم نتائج PagingSource.load مباشرةً ستضطر إلى التعامل مع LoadResult.Invalid في وقت الترجمة البرمجية. على سبيل المثال، على مستخدمي Kotlin الذين يستفيدون من exhaustive-when للتحقّق من نوع الإرجاع إضافة عملية تحقّق من النوع Invalid. (Id6bd3، b/191806126، b/192013267)

إصلاح الأخطاء

  • يتم الآن تشغيل عمليات معاودة الاتصال الخاصة بإبطال البيانات التي تمت إضافتها من خلال PagingSource.registerInvalidatedCallback أو DataSource.addInvalidatedCallback تلقائيًا إذا تم تسجيلها في PagingSource أو DataSource تم إبطالهما من قبل. يحلّ هذا الإجراء مشكلة تداخل البيانات التي كانت تؤدي إلى تجاهل إشارات الإبطال وتعليق عملية تحميل البيانات عند توفير مصدر غير صالح أثناء التحميل الأوّلي. بالإضافة إلى ذلك، تتم الآن إزالة عمليات رد الاتصال غير الصالحة بشكل صحيح بعد تشغيلها، لأنّه من المضمون أن يتم استدعاؤها مرة واحدة على الأكثر. (I27e69)
  • إرسال القيمة الأولية للعنصر النائب (InitialPagedList) من بث PagedList تم إنشاؤه حديثًا، مثل: لن يمحو 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)

إصلاح الأخطاء

  • لن يؤدي الوصول إلى PagedList.dataSource من القيمة الأولية التي تنتجها LivePagedList أو RxPagedList إلى ظهور IllegalStateException بشكل غير صحيح (I96707).

الإصدار 3.1.0-alpha01

‫2 حزيران (يونيو) 2021

تم طرح androidx.paging:paging-*:3.1.0-alpha01. يحتوي الإصدار 3.1.0-alpha01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تتوفّر الفئات التي يوفّرها paging-rxjava3 الآن ضمن حزمة androidx.paging.rxjava3 كي لا تتعارض مع paging-rxjava2 (Ifa7f6).

إصلاح الأخطاء

  • تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في عدم إرسال Paging لأحداث no-op differ إلى RecyclerView، ما كان يؤدي إلى تنشيط بعض أدوات معالجة الأحداث قبل الأوان. (Ic507f، b/182510751)

المساهمة الخارجية

  • تمت إضافة واجهات برمجة تطبيقات PagedList المتوافقة التي تم إيقافها نهائيًا إلى عنصر rxjava3 (Id1ce2، b/182497591)

الإصدار 1.0.0 من Paging Compose

الإصدار 1.0.0-alpha20

‫24 مايو 2023

تم طرح androidx.paging:paging-compose:1.0.0-alpha20. يحتوي الإصدار 1.0.0-alpha20 على عمليات الإيداع هذه.

الميزات الجديدة

  • تتيح مكتبة Paging Compose الآن معاينة قائمة من البيانات الوهمية من خلال إنشاء 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 على عمليات الإيداع هذه.

إتاحة جميع التصاميم الكسولة

في السابق، كانت مكتبة Paging Compose توفّر الإضافتين المخصّصتين items وitemsIndexed على LazyListScope، ما يعني أنّه لا يمكنك استخدام Paging Compose مع تنسيقات العرض الكسول الأخرى، مثل LazyVerticalGrid أو HorizontalPager أو غيرها من المكوّنات الكسولة المخصّصة التي توفّرها مكتبتا Wear وTV. ويشكّل حلّ هذه المشكلة التحديث الأساسي في هذا الإصدار.

لإتاحة المزيد من التصاميم الكسولة، كان علينا إنشاء واجهات برمجة تطبيقات في طبقة مختلفة. فبدلاً من توفير واجهة برمجة تطبيقات items مخصّصة لكل تصميم كسول، توفّر مكتبة Paging Compose الآن طرق إضافية بمستوى أقل قليلاً في LazyPagingItems ضمن itemKey وitemContentType. تركّز واجهات برمجة التطبيقات هذه على مساعدتك في تنفيذ المَعلمتَين 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)

تغييرات واجهة برمجة التطبيقات

  • لتسهيل عملية نقل البيانات إلى واجهات برمجة التطبيقات الجديدة، تتوافق وظائف الإضافة items وitemsIndexed في LazyListScope الآن مع المَعلمة contentType، ما يتيح إمكانية الاستخدام نفسها في واجهات برمجة التطبيقات الجديدة. (Ib1918، b/255283378)

تحديثات التبعيات

  • تم تعديل تبعية مكتبة Paging Compose من الإصدار 1.0.5 إلى الإصدار 1.2.1 من Compose. (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 على عمليات الإيداع هذه.

الميزات الجديدة

  • إتاحة استخدام CoroutineContext مخصّص عند الاتصال بـ collectLazyPagingItems (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))

إصلاح الأخطاء

  • تم إصلاح خطأ عدم توفّر الدالة الإنشائية PagingDataDiffer عند استخدام paging-compose:1.0.0-alpha15 مع paging-common:3.1.1 أو إصدار أقدم.(b/235256201،b/239868768)

الإصدار 1.0.0-alpha15

‫1 يونيو 2022

تم طرح androidx.paging:paging-compose:1.0.0-alpha15. يحتوي الإصدار 1.0.0-alpha15 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة أدوات إنشاء للفئتين PagingDataAdapter وAsyncPagingDataDiffer تقبل CoroutineContext بدلاً من CoroutineDispatcher. (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 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • أصبح بإمكانك الآن مراقبة itemCount وitem getter في LazyPagingItems، ما يتيح استخدامهما أيضًا مع LazyVerticalGrid (Ie2446 وb/171872064 وb/168285687).

توافق Compose

  • لا يتوافق androidx.paging:paging-compose:1.0.0-alpha09 إلا مع الإصدار 1.0.0-beta07 من Compose والإصدارات الأحدث.

الإصدار 1.0.0-alpha08

‫24 شباط (فبراير) 2021

تم طرح androidx.paging:paging-compose:1.0.0-alpha08. يحتوي الإصدار 1.0.0-alpha08 على عمليات الإيداع هذه.

تم تعديلها لتتكامل مع الإصدار 1.0.0-beta01 من Compose.

الإصدار 1.0.0-alpha07

10 شباط (فبراير) 2021

تم طرح androidx.paging:paging-compose:1.0.0-alpha07. يحتوي الإصدار 1.0.0-alpha07 على عمليات الإيداع هذه.

تم تعديلها لتتكامل مع الإصدار 12 من قناة Compose ألفا.

الإصدار 1.0.0-alpha06

‫28 يناير 2021

تم طرح androidx.paging:paging-compose:1.0.0-alpha06. يحتوي الإصدار 1.0.0-alpha06 على عمليات الإيداع هذه.

إصلاح الأخطاء

تم تعديلها لتعتمد على الإصدار 1.0.0-alpha11 من Compose.

الإصدار 1.0.0-alpha05

13 كانون الثاني (يناير) 2021

تم طرح androidx.paging:paging-compose:1.0.0-alpha05. يحتوي الإصدار 1.0.0-alpha05 على عمليات الإيداع هذه.

تم تعديلها لتعتمد على الإصدار 1.0.0-alpha10 من Compose.

الإصدار 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 على عمليات الإيداع هذه.

  • تم تعديلها لتتوافق مع الإصدار 1.0.0-alpha08 من Compose.

الإصدار 1.0.0-alpha02

‫11 نوفمبر 2020

تم طرح androidx.paging:paging-compose:1.0.0-alpha02. يحتوي الإصدار 1.0.0-alpha02 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة الطرق .peek() و.snapshot() و.retry() و.refresh() إلى LazyPagingItems التي تعرض الوظيفة نفسها المتوفّرة في 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 و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 على عمليات الإيداع هذه.

إصلاح الأخطاء

  • لن يؤدي الوصول إلى PagedList.dataSource من القيمة الأولية التي تنتجها LivePagedList أو RxPagedList إلى حدوث خطأ IllegalStateException (I96707) بشكل غير صحيح.

الإصدار 3.0.0

الإصدار 3.0.0

‫5 أيار (مايو) 2021

تم طرح androidx.paging:paging-*:3.0.0. يحتوي الإصدار 3.0.0 على عمليات الإيداع هذه.

الميزات الرئيسية في الإصدار 3.0.0

تم إيقاف معظم واجهة برمجة التطبيقات الحالية من الإصدار 2.x.x من Paging نهائيًا لصالح واجهات برمجة التطبيقات الجديدة في الإصدار 3 من Paging، وذلك بهدف إجراء التحسينات التالية:

  • توافق تام مع إجراءات Kotlin الفرعية وFlow
  • الدعم في ما يتعلق بالإلغاء
  • إشارات مدمجة لحالة التحميل والأخطاء
  • وظيفة إعادة المحاولة وإعادة التحميل
  • تم دمج جميع الفئات الفرعية لـ DataSource في فئة PagingSource موحَّدة
  • عمليات تحويل الصفحات المخصّصة، بما في ذلك عملية مدمجة لإضافة فواصل
  • جارٍ تحميل رؤوس وتذييلات الحالة

الإصدار 3.0.0-rc01

‫21 أبريل 2021

تم طرح androidx.paging:paging-*:3.0.0-rc01. يتضمّن الإصدار 3.0.0-rc01 عمليات الإيداع هذه.

إصلاح الأخطاء

  • تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في عدم إرسال Paging لأحداث no-op differ إلى 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)
  • لم تعُد أدوات إنشاء PagedList المختلفة (مسار التوافق القديم) تستدعي 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 دائمًا عند طلب إعادة التحميل عن بُعد.
  • تم إصلاح خطأ كان يؤدي إلى منع Paging من استرجاع البيانات مرة أخرى لتلبية الطلب prefetchDistance، ما يؤدي إلى "توقّف" Paging، وذلك عندما تعرض الصفحات الفارغة التي تعرضها PagingSource الرمز prefetchDistance.

الإصدار 3.0.0-beta01

10 شباط (فبراير) 2021

تم طرح androidx.paging:paging-*:3.0.0-beta01. يحتوي الإصدار 3.0.0-beta01 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تعرض الآن أغلفة Rx2 وRx3 التعليق التوضيحي التجريبي الذي تعتمد عليه. إذا كنت تستخدم أغلفة Rx المتوافقة في paging-rxjava2 أو paging-rxjava3، عليك الآن إضافة التعليق التوضيحي @OptIn(ExperimentalCoroutinesApi::class) (Ib1f9d) إلى الاستخدامات.

إصلاح الأخطاء

  • تم إصلاح الخطأ IndexOutOfBoundsException: Inconsistency detected الذي كان يظهر أحيانًا عند استخدام الإصدار 2 من واجهات برمجة التطبيقات DataSource من خلال مسارات التوافق
  • تم الآن إطلاق طلب isInvalid أثناء عملية تهيئة DataSource عند استخدامه من خلال مسارات التوافق بشكل صحيح على fetchDispatcher بدلاً من تنفيذه على سلسلة التعليمات الرئيسية. يؤدي ذلك إلى إصلاح IllegalStateException بسبب الوصول إلى قاعدة البيانات في سلسلة التعليمات الرئيسية عند استخدام تنفيذ PagingSource في Room.

الإصدار 3.0.0-alpha13

‫27 يناير 2021

تم طرح androidx.paging:paging-*:3.0.0-alpha13. يحتوي الإصدار 3.0.0-alpha13 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • لم يعُد تنفيذ PagingSource.getRefreshKey اختياريًا، بل أصبح دالة مجرّدة بدون تنفيذ تلقائي. يمكن للمستخدمين الذين ينقلون البيانات إما مواصلة عرض التنفيذ التلقائي الذي يعرض null فقط، ولكن يجب أن يتضمّن getRefreshKey() تنفيذًا حقيقيًا يعرض مفتاحًا استنادًا إلى موضع التمرير الحالي للمستخدم الذي يسمح لمكتبة Paging بمواصلة التحميل في منتصف إطار العرض باستخدام PagingState.anchorPosition إذا أمكن ذلك. (I4339a)
  • InvalidatingPagingSourceFactory هو الآن صف نهائي (Ia3b0a)
  • السماح بضبط سلوك فاصل المحطة (الرأس / التذييل) باستخدام مَعلمة SeparatorType اختيارية إضافية والخياران هما:
    • FULLY_COMPLETE - السلوك الحالي: انتظِر إلى أن يحدّد كل من PagingSource وRemoteMediator أنّ endOfPaginationReached قد تم الوصول إليه قبل إضافة فواصل نهائية. في حال عدم استخدام RemoteMediator، سيتم تجاهل remote loadState. يكون ذلك مفيدًا بشكل أساسي إذا كنت تريد عرض فواصل الأقسام فقط عند تحميل القسم بالكامل، بما في ذلك استرجاع البيانات من مصدر بعيد، مثل الشبكة.
    • SOURCE_COMPLETE - الانتظار فقط إلى أن تحدّد PagingSource endOfPaginationReached حتى إذا تم استخدام RemoteMediator يتيح ذلك عرض الرؤوس والتذييلات بشكل متزامن مع عملية التحميل الأولية، ما يمنع المستخدمين من الحاجة إلى التمرير للاطّلاع على الفواصل النهائية. (Ibe993، b/174700218)

إصلاح الأخطاء

  • تم إصلاح مشكلة نادرة لتسرُّب الذاكرة تحدث عند إبطال صحة PagingSource قبل أن يتمكّن PageFetcher من بدء التحميل منها. (I9606b، b/174625633)

الإصدار 3.0.0-alpha12

13 كانون الثاني (يناير) 2021

تم طرح androidx.paging:paging-*:3.0.0-alpha12. يحتوي الإصدار 3.0.0-alpha12 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • لم تعُد InvalidatingPagingSourceFactory فئة مجرّدة لأنّها لم تتضمّن أي طرق مجرّدة. (I4a8c4)
  • تمت إضافة تحميل زائد للدالة ‎ .cachedIn()‎ يقبل ViewModel بدلاً من Lifecycle أو CoroutineScope لمستخدمي Java. (I97d81، b/175332619)
  • السماح لمستخدمي Java بإجراء عمليات تحويل PagingData بشكل غير متزامن، وذلك من خلال قبول Executor في وسيطات عامل التشغيل transform. تمت إزالة اللاحقة -Sync من جميع عوامل تشغيل التحويل -Sync، وسيحتاج مستخدمو Kotlin Coroutine إلى إزالة الغموض عن طريق استدعاء دالة الإضافة التي تقبل كتلة تعليق بدلاً من ذلك. تم نقل جميع عوامل تشغيل تحويل PagingData إلى الإضافات ضمن فئة PagingDataTransforms الثابتة. على مستخدمي Java استدعاء هذه الدوال المساعدة الثابتة، مثل: PagingDataTransforms.map(pagingData, transform) بالنسبة إلى مستخدمي Kotlin، يكون بناء الجملة هو نفسه، ولكن عليك استيراد الدالة. (If6885، b/172895919)

إصلاح الأخطاء

  • تم إصلاح الخطأ الذي لم يتم فيه استدعاء RemoteMediator.load() أثناء adapter.refresh() إذا تم الوصول إلى نهاية تقسيم الصفحات.

الإصدار 3.0.0-alpha11

16 كانون الأول (ديسمبر) 2020

تم طرح androidx.paging:paging-*:3.0.0-alpha11. يحتوي الإصدار 3.0.0-alpha11 على عمليات الإيداع هذه.

الميزات الجديدة

  • تمت إضافة ميزة حفظ الحالة للحالات الأساسية التالية (لا يزال العمل جارٍ على توفير الدعم الكامل، خاصةً في حالة المصدر ذي الطبقات):
    • يتم تخزين التدفق مؤقتًا ولا يتم إيقاف التطبيق (على سبيل المثال، يتم تخزين التدفق مؤقتًا في نموذج عرض ويتم إعادة إنشاء النشاط في العملية)
    • يتم احتساب مصدر التقسيم إلى صفحات، ويتم تفعيل العناصر النائبة، ولا يكون التنسيق متداخلاً.

تغييرات واجهة برمجة التطبيقات

  • أصبحت السمة PagingSource.getRefreshKey() الآن واجهة برمجة تطبيقات ثابتة (I22f6f، b/173530980)
  • لم يعُد PagingSource.invalidate دالة مفتوحة. إذا كنت بحاجة إلى تلقّي إشعار عند حدوث الإبطال، ننصحك باستخدام طريقة registerInvalidatedCallback بدلاً من إلغاء طريقة invalidate. (I628d9، b/173029013، b/137971356)
  • يتضمّن Pager الآن أداة إنشاء تجريبية واحدة إلى جانب أدوات الإنشاء العادية، بدلاً من تسريب واجهات برمجة التطبيقات التجريبية إلى واجهة برمجة التطبيقات العامة غير التجريبية من خلال التعليق التوضيحي الذي يتطلّب الموافقة. (I9dc61، b/174531520)
  • تم تعديل خصائص الراحة، CombinedLoadStates.refresh، CombinedLoadStates.prepend، CombinedLoadStates.append للانتقال فقط من Loading إلى NotLoading بعد أن تصبح حالة التحميل لكل من الوسيط والمصدر NotLoading، وذلك لضمان تطبيق التعديل عن بُعد. (I65619)
  • تمت إزالة LoadParams.pageSize (كانت هذه السمة متوقّفة نهائيًا). ننصح باستخدام LoadParams.loadSize في PagingSource.

    تكون قيمة LoadParams.loadSize مساوية دائمًا لقيمة PagingConfig.pageSize، باستثناء طلب التحميل الأولي الذي تكون فيه قيمة LoadParams.loadSize مساوية لقيمة PagingConfig.initialLoadSize.

    إذا كنت تختبر Paging2 DataSource بدون استخدام Pager أو PagedList، قد لا يتطابق pageSize مع PagingConfig.pageSize إذا كنت تضبط initialLoadSize أيضًا. إذا كان ذلك مهمًا لاختباراتك، جرِّب استخدام Pager أو PagedList بدلاً من ذلك، ما سيؤدي إلى ضبط PageSize الصحيح داخليًا لطُرق تحميل DataSource. (I98ac7، b/149157296)

إصلاح الأخطاء

  • تم إصلاح عُطل بسبب IllegalStateException عند استخدام فواصل مع ضبط PagingConfig.maxSize. (I0ed33، b/174787528)
  • تم إصلاح الخطأ الذي كان يتسبّب في عدم تعديل حالة التحميل الخاصة بـ PREPEND / APPEND إلى NotLoading(endOfPaginationReached = true) مباشرةً بعد التحميل الأوّلي في حال ضبط RemoteMediator (I8cf5a).
  • تم إصلاح الخطأ الذي كان يؤدي إلى أن تعرض واجهات برمجة التطبيقات من جهة مقدّم العرض، مثل ‎.snapshot()‎ و‎.peek()‎ وما إلى ذلك، القائمة السابقة (القديمة) ضمن تعديلات ListUpdateCallback.
  • تم إصلاح الخطأ الذي كان يمنع عوامل تشغيل الفواصل من إضافة العناوين أو التذييلات عند استخدامها مع RemoteMediator
  • تم إصلاح الخطأ الذي كان يؤدي إلى توقُّف تحديثات LoadState إلى NotLoading في حالة Loading بالنسبة إلى RemoteMediator
  • تم إصلاح الخطأ الذي كان يتسبّب في إمكانية تهيئة DataSource الأساسية على CoroutineDispatcher غير الصحيح من خلال واجهة برمجة التطبيقات المتوافقة مع الإصدار 2.0 من مكتبة Paging، .asPagingSourceFactory(). يؤدي ذلك إلى حلّ مشكلة تعذُّر التطبيق عن العمل وحالات ANR المحتملة، خاصةً عند استخدام التنفيذ الحالي لـ PagingSource في Room، والذي يستخدم مسار التوافق هذا.

الإصدار 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)

إصلاح الأخطاء

  • يتم الآن نقل قيمة endOfPaginationReached الخاصة بـ RemoteMediator REFRESH بشكل صحيح إلى تحديثات LoadState، ما يمنع تشغيل APPEND وPREPEND عن بُعد. (I94a3f، b/155290248)
  • لن يؤدي عرض قائمة فارغة بسبب صفحة أولية فارغة أو بسبب فلترة مكثّفة إلى منع بدء عمليات تحميل PREPEND أو APPEND. (I3e702، b/168169730)
  • تم إصلاح المشكلة المتمثّلة في عدم استدعاء getRefreshKey في عمليات الإنشاء اللاحقة لـ PagingSource عند حدوث عمليات إبطال بشكل سريع. (I45460، b/170027530)

المساهمة الخارجية

  • تمت إضافة فئة مجرّدة جديدة باسم InvalidatingPagingSourceFactory مع واجهة برمجة تطبيقات .invalidate() التي تعيد التوجيه إلى جميع PagingSource التي تصدرها. شكرًا @claraf3. (Ie71fc، b/160716447)

المشاكل المعروفة

  • قد لا تظهر العناوين والتذييلات من عملية التحويل ‎ .insertSeparators()‎ على الفور عند استخدام RemoteMediator b/172254056
  • قد يؤدي استخدام RemoteMediator إلى توقّف LoadState عن العمل إذا اكتملت عملية الإبطال وPagingSource.load(LoadParams.Refresh(...)) قبل أن تعرض RemoteMediator.load() القيمة b/173717820

الإصدار 3.0.0-alpha09

‫11 نوفمبر 2020

تم طرح androidx.paging:paging-*:3.0.0-alpha09. يحتوي الإصدار 3.0.0-alpha09 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • إيقاف نهائي لطرق dataRefreshFlow / Listener مع تضمين عبارة replaceWith. (I6e2dd)

إصلاح الأخطاء

  • إصلاح الخطأ IllegalArgumentException الذي يحدث عند استخدام الفواصل مع RemoteMediator وتفعيل عملية إبطال أثناء استمرار عملية تحميل عن بُعد من المفترض أن تعرض endOfPagination (I3a260)

الإصدار 3.0.0-alpha08

‫28 أكتوبر 2020

تم طرح androidx.paging:paging-*:3.0.0-alpha08. يحتوي الإصدار 3.0.0-alpha08 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • تم دمج صيغ Kotlin / Java الخاصة بـ DataSource.InvalidatedCallback من خلال تفعيل عمليات تحويل SAM في Kotlin عبر واجهة وظيفية (متاحة في Kotlin 1.4). يؤدي ذلك أيضًا إلى إصلاح الخطأ الذي كان يتسبّب في عدم استدعاء صيغة Kotlin لعمليات رد الاتصال الخاصة بالدالة invalidate بعد تحويلها باستخدام .map أو .mapByPage. (I1f244، b/165313046)

إصلاح الأخطاء

  • تم تحسين تفاعل Paging مع ViewPager بشكل كبير. على وجه التحديد، لن تلغي ميزة "التقسيم إلى صفحات" طلب RemoteMediator#load بسبب إبطال الصفحة. ولن يتم أيضًا تقديم طلب تحميل للإضافة/الإلحاق إذا كان REFRESH مطلوبًا إلى أن يكتمل طلب REFRESH بنجاح. (I6390b، b/162252536)
  • تم تفعيل فحص API lint للخطأ MissingGetterMatchingBuilder في androidx (I4bbea وb/138602561)
  • تم إصلاح خطأ كان يؤدي إلى تعذُّر عمل أدوات المساعدة .withLoadState* ConcatAdapter بسبب إرسال إشعار إلى RecyclerView من سلسلة الخلفية (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 وسيطًا من النوع Executor للتحكّم في سياق التنفيذ. (Id4372)

إصلاح الأخطاء

  • تم إصلاح الخطأ IndexOutOfBounds الذي تم رصده في RemoteMediator بسبب حالة تزامن. (I00b7f, b/165821814)
  • تم إصلاح مشكلة تزامن في عملية التحويل من DataSource إلى PagingSource، ما كان يؤدي إلى تجاهل PagingSource لإشارات الإبطال من DataSource.
  • تم إصلاح مشكلة في منطق جلب الصفحات كانت تؤدي أحيانًا إلى عدم رصد الأجيال الجديدة من PagingSource إلى أن يتم استدعاء PagingDataAdapter.refresh()
  • تم إصلاح مشكلة كانت تؤدي أحيانًا إلى فقدان موضع التمرير عند استخدام DataSource تم تحويله إلى PagingSource (مثل العنصر الذي تنتجه Room)، وذلك بالتزامن مع RemoteMediator

المساهمة الخارجية

  • نشكر @simonschiller على إضافة عوامل تشغيل التحويل غير المتزامن المستندة إلى RxJava2 وRxJava3 وGuava إلى PagingData.

الإصدار 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 عند إعادة تحميل الصفحة يؤدي إلى إعادة تشغيل عملية إعادة المحاولة بشكل غير صحيح.

المساهمة الخارجية

  • نشكر Clara F على مساعدتها في إزالة بعض الاختبارات. (549612)

الإصدار 3.0.0-alpha04

‫5 آب (أغسطس) 2020

تم طرح androidx.paging:paging-*:3.0.0-alpha04. يحتوي الإصدار 3.0.0-alpha04 على عمليات الدمج هذه.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة واجهة برمجة التطبيقات peek() إلى AsyncPagingDataDiffer وPagingDataAdapter للسماح بالوصول إلى البيانات المعروضة بدون الحاجة إلى تحميل الصفحات. (I38898، b/159104197)
  • تمت إضافة واجهة برمجة تطبيقات snapshot() إلى PagingDataAdapter وAsyncPagingDataDiffer للسماح باسترداد العناصر المعروضة بدون بدء عملية جلب الصفحة. (I566b6، b/159104197)
  • تمت إضافة الدالة الإنشائية PagingData.from(List<T>) للسماح بعرض القوائم الثابتة، والتي يمكن دمجها مع تدفق PagingData العام لعرض القوائم الثابتة في حالات معيّنة، مثلاً قبل انتهاء عملية REFRESH الأولية أو ببساطة لاختبار عمليات التحويل. (Id134d)
  • إيقاف واجهات برمجة التطبيقات DataRefresh Flow / Listener نهائيًا لأنّها كانت تهدف إلى عرض حالة العناصر المعروضة عند إعادة التحميل، ولكن مع التحسينات التي أُجريت على توقيت معاودة الاتصال في loadState Flow / Listener، والخاصية itemCount، أصبحت هذه الواجهات غير ضرورية (Ia19f3)
  • تمت إضافة برامج تضمين متوافقة مع RxJava3 لكل من PagingSource وRemoteMediator (I49ef3، b/161480176)

إصلاح الأخطاء

  • تم تحويل PositionalDataSource إلى PagingSource باستخدام toPagingSourceFactory، بما في ذلك PagingSource الذي تم إنشاؤه بواسطة Room، ويتم الآن وضع علامة عليها بشكل صحيح لتتيح الانتقال السريع. (I3e84c، b/162161201)
  • تم إصلاح خطأ كان يؤدي أحيانًا إلى حدوث تعارض عند استخدام الإصدار المتزامن من submitData، ما كان يتسبّب في ظهور ClosedSendChannelException (I4d702، b/160192222)

المساهمة الخارجية

  • نشكر Zac Sweers على إضافة برامج تضمين متوافقة مع RxJava3 نيابةً عن Slack. (I49ef3، b/161480176)

الإصدار 3.0.0-alpha03

‫22 تموز (يوليو) 2020

تم طرح androidx.paging:paging-*:3.0.0-alpha03. يحتوي الإصدار 3.0.0-alpha03 على عمليات الإيداع هذه.

تغييرات واجهة برمجة التطبيقات

  • أصبح الآن من الممكن الوصول إلى أداة إنشاء PagingState، ما يسهّل اختبار عمليات تنفيذ getRefreshKey() (I8bf15).
  • إخفاء أشكال مختلفة من دالة map في Kotlin الخاصة بـ DataSource عن Java، وذلك لحل الغموض بين الأشكال الأصلية وأشكال Kotlin (If7b23، b/161150011)
  • تم وضع العلامة ‎ @JvmSynthetic على واجهات برمجة التطبيقات المكرّرة التي تهدف إلى تسهيل استخدام لغة Kotlin (I56ae5).
  • تمت إضافة عمليات تحميل زائدة لمنشئ LoadResult.Page الذي يضبط قيمتَي itemsBefore وitemsAfter تلقائيًا على COUNT_UNDEFINED (I47849)
  • تم تعديل عوامل تشغيل PagingData الحالية لتتوافق مع طرق تعليق التنفيذ، وتمت إضافة عوامل تشغيل mapSync وflatMapSync وfilterSync الجديدة غير المعلقة لمستخدمي Java. تم نقل طرق التحويل الحالية إلى دوال إضافية، لذا على مستخدمي Kotlin استيرادها الآن. (I34239، b/159983232)

إصلاح الأخطاء

  • ستعرض الآن PagingSources الخاصة بـ Room (وPositionalDataSource) فاصلة بادئة كجزء من الصفحة الأولى، وبالتالي لن يحتاج المستخدم إلى التمرير للعثور عليها. (I6f747، b/160257628)
  • تؤدي عمليات الوصول إلى العناصر في العناصر النائبة الآن إلى تشغيل عمليات تحميل PagingSource بشكل صحيح إلى أن يتم عرض صفحة تستوفي الفهرس المطلوب بعد أن يتم تحويلها باستخدام PagingData.filter() (I95625، b/158763195)
  • تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى منع PagingDataAdapter.retry()‎ من إعادة المحاولة عند ظهور خطأ أثناء التمرير بعد أن تعرض PagingSource خطأ. (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).
  • تمت إضافة واجهات برمجة تطبيقات RxJava وGuava إلى RemoteMediator - RxRemoteMediator وListenableFutureRemoteMediator
  • تمت إضافة أدوات مساعدة إلى PagingState لتسهيل الوصول إلى العناصر الشائعة، مثل isEmpty() وfirstItemOrNull() (I3b5b6 وb/158892717).

إصلاح الأخطاء

  • يتحقّق Pager الآن من إعادة استخدام PagingSource في المصنع، وذلك لمنع إعادة الاستخدام غير المقصودة لـ PagingSource غير الصالحة، والتي أدّت إلى ظهور خطأ غير واضح (I99809، b/158486430)
  • لم تعُد حالات تعذُّر تنفيذ RemoteMediator REFRESH تمنع PagingSource من التحميل (I38b1b، b/158892717)
  • لم يعُد الإصدار غير المعلق من submitData يتسبّب في حدوث عطل بسبب عملية جمع متزامنة على عدة PagingData عند استدعائه بعد الإصدار المعلق من submitData. (I26358، b/158048877)
  • تم إصلاح الاستثناء "لا يمكن جمع البيانات مرتين من أداة التقسيم إلى صفحات" الذي كان يمكن أن يحدث بعد تغيير الإعدادات (I58bcc، b/158784811)

الإصدار 3.0.0-alpha01

‫10 يونيو 2020

تم طرح androidx.paging:paging-*:3.0.0-alpha01. يحتوي الإصدار 3.0.0-alpha01 على عمليات الدمج هذه.

تم تعديل مكتبة Paging إلى الإصدار 3.0، وذلك لتفعيل العديد من الميزات الرئيسية الجديدة.

الميزات الجديدة في الإصدار 3.0

المشاكل المعروفة

  • لم تتوفّر مستندات Java الخاصة بمكتبة Paging 3 بعد. في الوقت الحالي، يُرجى استخدام الأدلة المرتبطة أعلاه أو مستندات 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 من مكتبة Paging على إضافتين رئيسيتين، وهما إيقاف الصفحات ومكتبات إضافة KTX لكل عنصر، بالإضافة إلى العديد من التغييرات الأخرى في واجهة برمجة التطبيقات وإصلاح الأخطاء.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة PagedList.Config.Builder.setMaxSize() للحدّ من عدد العناصر التي يتم تحميلها في الذاكرة.
  • تمت إضافة androidx.paging.Config() كبديل للغة Kotlin عن PagedList.Config.Builder
  • تمت إضافة androidx.paging.PagedList() كبديل للغة Kotlin عن PagedList.Builder
  • تمت إضافة DataSourceFactory.toLiveData() كبديل للغة Kotlin عن LivePagedListBuilder
  • تمت إضافة DataSourceFactory.toObservable() وtoFlowable() كبديلَين للغة Kotlin عن RxPagedListBuilder
  • تمت إضافة AsyncPagedListDiffer.addPagedListListener() للاستماع إلى وقت تبديل PagedList. 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 لتحقيق الثبات. تم أيضًا إصدار مكتبة Paging RxJava2 1.0.1، وهي مطابقة لمكتبة 1.0.0-rc1.

إصلاح الأخطاء

  • تم إصلاح الأعطال التي كانت تؤدي إلى عدم إرسال إشارات أحداث النقل في PagedListAdapter وAsyncPagedListDiffer. b/110711937

الإصدار 1.0.0 من RxJava2

RxJava2 Version 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، وهي قادرة على إنشاء Observable وFlowable، وتستخدِم Scheduler بدلاً من Executor:

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 إلى تشغيل عملية التحميل الأولي PagedList على المنفّذ المحدّد، بدلاً من مجموعة سلاسل الإدخال/الإخراج في "مكوّنات بنية التطبيق".

  • تم إصلاح سلوك الإبطال في أغلفة DataSource الداخلية (المستخدَمة لتنفيذ DataSource.map، بالإضافة إلى تحميل PositionalDataSource غير المفعَّل في العنصر النائب) b/77237534

الإصدار 1.0.0-alpha7

‫21 مارس 2018

يتم إصدار 1.0.0-alpha7 مع مكتبة Lifecycles 1.1.1. بما أنّ الإصدار alpha7 من مكتبة Paging يعتمد على نقل الفئة Function المذكورة أعلاه، عليك تعديل تبعية lifecycle:runtime إلى android.arch.lifecycle:runtime:1.1.1.

من المخطّط أن يكون الإصدار alpha7 هو الإصدار النهائي قبل أن تصبح ميزة "التصفُّح" متاحة في الإصدار التجريبي.

تغييرات واجهة برمجة التطبيقات

  • تحتوي كائنات DataSource.LoadParams الآن على دالة إنشاء عامة، وأصبحت كائنات DataSource.LoadCallback مجرّدة. يتيح ذلك تضمين DataSource أو اختبار DataSource مباشرةً باستخدام دالة معاودة الاتصال وهمية. b/72600421
  • Mappers for DataSource and 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 للتعامل مع طلبات البحث المتعددة الجداول، ويتضمّن هذا الإصلاح الإصدار 1.1.0-beta1 من Room، كما هو موضّح أعلاه.
  • تم إصلاح خطأ كان يؤدي إلى عدم استدعاء BoundaryCallback.onItemAtEndLoaded لـ PositionalDataSource في حال تفعيل العناصر النائبة وكان الحجم الإجمالي مضاعفًا لعدد صحيح من حجم الصفحة.

الإصدار 1.0.0-alpha5

‫22 يناير 2018

إصلاح الأخطاء

  • إصلاح مشكلة تحميل الصفحة عند إيقاف العناصر النائبة b/70573345
  • تسجيل إضافي لتتبُّع الخطأ IllegalArgumentException b/70360195 (وإصلاح تجريبي من جهة Room)
  • إصلاحات الرموز النموذجية في Javadoc b/70411933 وb/71467637