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

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

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

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأوّلي
paging-* 3.3.6 - - 3.4.0-alpha03
paging-compose 3.3.6 - - 3.4.0-alpha03
تم إجراء آخر تعديل على هذه المكتبة في: 27 أغسطس 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-alpha03"
}

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

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

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

الملاحظات

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

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

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

الإصدار 3.4

الإصدار 3.4.0-alpha03

‫27 أغسطس 2025

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

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

  • أضافت مكتبة Paging-common نظام التشغيل المكتبي كهدف جديد من Kotlin Multiplatform (KMP). يتوافق الآن بشكلٍ كامل مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (Id2483، b/436884811)
  • أضافت مكتبة Paging-testing أهدافًا جديدة من Kotlin Multiplatform (KMP). يتوافق الآن بشكلٍ كامل مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (I0c543، b/435014650)
  • أضافت مكتبة Paging-compose أهدافًا جديدة من Kotlin Multiplatform (KMP). يتوافق الآن بشكلٍ كامل مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (I70d44، b/436884801)

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

  • تغيير الحد الأدنى التلقائي لإصدار SDK من المستوى 21 لواجهة برمجة التطبيقات إلى المستوى 23 (Ibdfca، b/380448311، b/435705964، b/435705223)

الإصدار 3.4.0-alpha02

‫30 يوليو 2025

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

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

  • تتيح PagingData.from الآن ضبط placeholdersBefore وplaceholdersAfter. يُرجى العِلم أنّ التنقّل بين هذه العناصر النائبة لا يؤدي إلى تحميلها. (I06983)

الإصدار 3.4.0-alpha01

‫2 يوليو 2025

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

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

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

  • لن يتم بعد الآن عرض استثناءات من 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 Multiplatform، وهي: 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 API الداخلية أو AsyncPagingDataDiffer في paging-runtime.
  • تمت إضافة طريقتَي مساعدة جديدتَين LoadStates وCombinedLoadStates في hasError وisIdle للتحقّق مما إذا كان LoadStates في حالة "خطأ" أو حالة 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 API الداخلية أو AsyncPagingDataDiffer في paging-runtime. (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. (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 ودالة جلب العناصر في 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 خطأ.

الإصدار 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 لعمليات رد الاتصال الخاصة بالبطلان بعد تحويلها باستخدام .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)
  • إخفاء أشكال مختلفة من دالة الخريطة في 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 إضافتين رئيسيتين، وهما حذف الصفحات ومكتبات إضافة 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

سيتم نقل الإصدار 1.0.0-rc1 من مكتبة Paging RxJava2 إلى الإصدار المحتمَل بدون أي تغييرات عن الإصدار الأوّلي من قناة ألفا.

الإصدار 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 مع ميزة "دورات الحياة" 1.1.1. بما أنّ الإصدار alpha7 من مكتبة Paging يعتمد على نقل الفئة 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 للتعامل مع طلبات البحث المتعددة الجداول، ويتضمّن الإصدار 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