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

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

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

العناصر الإصدار الثابت إصدار محتمل الإصدار التجريبي الإصدار الأولي
paging-* 3.5.3 - - -
paging-compose 3.5.3 - - -
تاريخ آخر تعديل على هذه المكتبة: 12 أكتوبر 2026

تحديد الاعتماديات

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

أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:

Groovy

dependencies {
  def paging_version = "3.5.3"

  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.5.3"
}

Kotlin

dependencies {
  val paging_version = "3.5.3"

  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.5.3")
}

للحصول على معلومات حول استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات ktx.

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

الملاحظات

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

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

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

الإصدار 3.5

الإصدار 3.5.3

‫12 أكتوبر 2026

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

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

  • لن يعرض ItemSnapshotListFlow بعد الآن الخطأ IllegalArgumentException عندما يصل RemoteMediator إلى نهاية تقسيم الصفحات في أي من الاتجاهين ويتم تحويل رأس الصفحة أو تذييلها إلى فاصل نهائي. (I821c7، b/566336825)
  • عندما تتجاوز الصفحات التي تم تحميلها PagingConfig.maxSize، لن تنخفض الصفحات التي تم تحميلها إلى أقل من صفحتَين لضمان ملء إطار العرض بالبيانات بشكل صحيح. (I037a0، b/565835910)

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

نشكر إيغور على إرسال إصلاح الخطأ b/565835910

الإصدار 3.5.2

‫7 أكتوبر 2026

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

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

  • لن يعرض Pager.append() بعد الآن الخطأ NoSuchElementException عند إجراء مكالمات قبل اكتمال عملية إعادة التحميل الأولية. لن يتم تنفيذ طلب الإضافة. (Ide387، b/556780796)

الإصدار 3.5.1

‫12 أغسطس 2026

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

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

  • تم إصلاح مشكلة تقديم PagingSource.getRefreshKey لـ anchorPosition غير صحيح وكبير جدًا عند إعادة تحميل صفحة تحتوي على فواصل أثناء الانتقال إلى العناصر النائبة. (I475f0، b/516565503)

الإصدار 3.5.0

‫6 مايو 2026

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

التغييرات المهمة منذ الإصدار 3.4.0:

  • تمت إضافة عامل التشغيل Flow<PagingData>.asItemSnapshotListFlow لتحويل Flow<PagingData> إلى Flow<ItemSnapshotList>. يعني ذلك أنّه يمكن الآن الوصول إلى البيانات المحمَّلة خارج طبقة واجهة المستخدم، ما يتيح لك دمج Flow<ItemSnapshotList> مع مصادر بيانات أخرى، وتخزين البيانات المقسَّمة إلى صفحات مؤقتًا وتعديلها على الجهاز، أو عرض البيانات المقسَّمة إلى صفحات كجزء من حالة واجهة المستخدم، وغير ذلك.

  • تمت إضافة دالتي الإضافة Pager.append وPager.prepend لتحميل المزيد من البيانات يدويًا بدون الانتقال للأسفل.

  • تمت إضافة دالّتَي الإضافة Pager.refresh وPaging.retry للتعافي من أخطاء التحميل عند استخدام واجهة برمجة التطبيقات asItemSnapshotListFlow.

الإصدار 3.5.0-rc01

‫22 أبريل 2026

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

لا تغييرات

  • ما مِن تغييرات ملحوظة مقارنةً بالإصدار 3.5.0-beta01.

الإصدار 3.5.0-beta01

‫8 أبريل 2026

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

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

  • تمت إعادة تسمية واجهة برمجة التطبيقات Flow<PagingData>.asState إلى Flow<PagingData>.asItemSnapshotListFlow (I0dc11، b/496548025)

الإصدار 3.5.0-alpha01

‫11 مارس 2026

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

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

  • يحتوي العنصر paging-common الآن على عامل تشغيل جديد asState في Flow<PagingData> لتحويله إلى Flow<ItemSnapshotList>. يتيح ذلك إمكانات مثل:

    • دمج بيانات Flow of ItemSnapshotList مع مصادر بيانات أخرى
    • مشاركة سير العمل مع عدة جهات جمع بدون cachedIn
    • تخزين البيانات المقسّمة إلى صفحات مؤقتًا على الجهاز
    • تعديل البيانات المقسّمة إلى صفحات في الذاكرة
    • عرض البيانات المقسّمة إلى صفحات كجزء من حالة واجهة المستخدم
    // In your ViewModel
    val pager = Pager(pagingConfig, pagingSourceFactory)
    val pagerFlow = pager.flow.asState()
    
    // alterantively convert the flow to a SharedFlow
    val pagerFlow = pager.flow.asState().stateIn()
    
    // In presenter layer
    val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList)
    val snapshot = itemsFlow.value
    
    LazyColumn {
    items(items = snapshot.items) { ... }
    }
    
  • أضافت أداة paging-common أيضًا واجهتَي برمجة التطبيقات Pager.append وPager.prepend لتفعيل عمليات التحميل يدويًا على أي من حافتي العناصر المحمَّلة.

    • عند استخدامها مع paging-runtime أو paging-compose، توفّر بديلاً لتحميل المزيد من البيانات بالإضافة إلى التمرير
    • عند استخدام هذه السمة مع واجهة برمجة التطبيقات الجديدة asState، تكون الطريقة الوحيدة لتحميل المزيد من البيانات
    LazyColumn {
    item {
           /**
           * Load more items when users scroll near the top of loaded items.
           */
           LaunchedEffect(viewModel) { viewModel.prepend() }
        }
    items(snapshot.items) { item -> Text("Item: $item") }
    item {
            /**
            * Load more items when users scroll near the bottom of loaded items.
            */
          LaunchedEffect(viewModel) { viewModel.append() }
      }
    }
    
  • تمت إضافة Pager.refresh وPager.retry للتعافي من أخطاء التحميل عند استخدام واجهة برمجة التطبيقات asState. يمكنك الاطّلاع على هذا المستند لمزيد من نماذج استخدام واجهات برمجة التطبيقات الجديدة. (I1e1e9، If3c87، Idbd48، Id1e1d، I816fe)

الإصدار 3.4

الإصدار 3.4.2

‫11 مارس 2026

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

لا تغييرات

  • لا يتضمّن هذا الإصدار أي تغيير في واجهة برمجة التطبيقات أو السلوك مقارنةً بالإصدار 3.4.1.

الإصدار 3.4.1

‫11 فبراير 2026

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

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

  • تم تحديث اعتمادية guava في paging-guava من الإصدار 31.1 إلى 32.0.1.

الإصدار 3.4.0

‫28 يناير 2026

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

التغييرات المهمة منذ الإصدار 3.3.0:

  • تمّت إضافة المزيد من أهداف KMP إلى paging-common وpaging-testing وpaging-compose. أصبحت جميعها متوافقة مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS)
  • تمت إزالة إمكانية استخدام macosX64 وiosX64 وwatchosX64 وtvosX64 في paging-common وpaging-testing وpaging-compose للتوافق مع إيقاف Jetbrains لأهداف macosX64 نهائيًا.
  • تمت إضافة واجهة برمجة تطبيقات PagingState جديدة closestItemAroundPosition لاسترداد العنصر الذي تم تحميله والأقرب إلى الموضع المستهدَف ويتطابق مع دالة الإدخال. يمكن استخدام هذه السمة لإنشاء مفاتيح إعادة تحميل مستندة إلى العناصر عندما يكون العنصر المثالي القابل للتثبيت قريبًا من موضع الاستهداف الدقيق ولكن ليس فيه.

الإصدار 3.4.0-rc01

‫14 يناير 2026

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

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

الإصدار ‎3.4.0-beta01

‫17 ديسمبر 2025

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

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

  • تم إصلاح مشكلة التزامن بين عمليات تحميل RecyclerView وRefresh التي تؤدي إلى IndexOutOfBoundsException في RecyclerView. يمكن أن تؤدي تحديثات واجهة المستخدم التي تتم مقاطعتها بسبب عمليات تحميل Refresh المستمرة إلى إلغاء مزامنة حالة Paging مع RecyclerView. ويمكن حلّ هذه المشكلة من خلال إعادة ضبط ميزة Paging على حالتها السابقة قبل إعادة التحميل في حال مقاطعة عملية إعادة التحميل (أي من خلال تحميل Refresh متتالي). (I771b0، b/409809768)

الإصدار ‎3.4.0-alpha04

‫10 سبتمبر 2025

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

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

  • تمت إضافة واجهة برمجة تطبيقات PagingState جديدة closestItemAroundPosition لاسترداد العنصر الذي تم تحميله والأقرب إلى الموضع المستهدَف والذي يتطابق مع دالة الإدخال. يمكن استخدام هذه الطريقة لإنشاء مفاتيح إعادة تحميل مستندة إلى العناصر، حيث يكون العنصر المثالي القابل للتثبيت في مكان قريب من موضع الاستهداف الدقيق وليس فيه تمامًا. (I96e5c، b/440187139)

الإصدار 3.4.0-alpha03

‫27 أغسطس 2025

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

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

  • أضافت مكتبة Paging-common نظام التشغيل المكتبي كهدف جديد من Kotlin Multiplatform (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 هذه التعديلات.

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

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

  • لن تؤدي اختبارات الوحدات في Android التي تستخدم الإصدار 3.3 أو إصدارًا أحدث من مكتبة Paging إلى حدوث خطأ من PagingLogger (Ia9400، b/331684448).
  • تم إصلاح خطأ يتسبّب في ظهور رسالة الخطأ IndexOutOfBoundsException في RecyclerView عندما ينتقل المستخدم إلى أسفل الصفحة أثناء تحديث 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 هذه التعديلات.

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

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

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

  • شكرًا إيفا على إرسال إصلاح الخطأ (#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 عمليات النشر هذه.

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

  • لن تظهر رسالة الخطأ Method isLoggable in android.util.Log not mocked بعد الآن في اختبارات وحدات Android التي تستخدم الإصدار 3.3 من Paging أو الإصدارات الأحدث. (Ia9400، b/331684448)

الإصدار 3.3.2

‫7 أغسطس 2024

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

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

  • تمّت إضافة أهداف جديدة من Kotlin-Multiplatform إلى paging-common وpaging-testing: 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 في حالة خطأ أو حالة 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 Multiplatform. (aosp/2950785)

الإصدار ‎3.3.0-alpha03

‫7 فبراير 2024

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

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

  • أصبح الصف "PagingDataPresenter" الآن صفًا عامًا. يمكن الآن إنشاء مقدِّمي عروض متعدّدي المنصات على PagingDataPresenter بدلاً من طلب واجهات برمجة تطبيقات Paging داخلية أو 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)). لا يعمل هذا الحلّ إلا مع عمليات Flow التي يمكن إكمالها (مثل flowOf(PagingData.from(...))). أما عمليات Flow التي لا يمكن إكمالها (مثل MutableStateFlow، فاستخدِم عملية التحميل الزائد PagingData.from التي توفّر LoadStates). (I502c3)
  • تستخدم ميزة "تقسيم الصفحات" في 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 يمكن تمريره إلى أداة عرض الصفحات في الاختبارات
    • إضافة Kotlin‏ asSnapshot في Flow<PagingData<Value>>، والتي تترجم Flow<PagingData<Value>> إلى List<Value> مباشرةً. تتيح لك واجهة asSnapshot lambda محاكاة واجهة المستخدم في تطبيقك من خلال واجهات برمجة التطبيقات، مثل scrollTo أو appendScrollWhile، لتتمكّن من التحقّق من صحة لقطة البيانات في أي نقطة في مجموعة البيانات المقسّمة إلى صفحات.
  • تمت إضافة سجلّات تلقائية لعرض معلومات تصحيح أخطاء Paging على مستويَين: 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 توفّر سطح واجهة برمجة تطبيقات أكثر وضوحًا من دوال lambda الحالية () -> PagingSource. يمكن استخدام هذه الفئة لإنشاء مثيل Pager. (I33165، b/280655188)
  • تمت إضافة واجهة برمجة تطبيقات جديدة paging-testing من List<Value>.asPagingSourceFactory() للحصول على PagingSourceFactory يتم تحميله فقط من قائمة بيانات غير قابلة للتغيير. يجب مواصلة استخدام الإضافة الحالية على Flow<List<Value>> للاختبار مع أجيال متعددة من البيانات الثابتة. (Id34d1، b/280655188)

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

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

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

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

يتضمّن هذا الإصدار عنصرًا جديدًا: paging-testing. يوفّر هذا العنصر واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من طبقات تطبيقك ودمجها مع مكتبة Paging بشكل منفصل.

على سبيل المثال، يتضمّن هذا الإصدار الأول فئة TestPager تتيح لك التحقّق من سلوك تنفيذ PagingSource المخصّص بشكل مستقل عن Pager وواجهة المستخدم الحقيقية التي تحتاج عادةً إلى محاكاة دمج ميزة "تقسيم الصفحات" من البداية إلى النهاية.

يجب اعتبار 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 هذه التعديلات.

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

  • توفر Paging الآن سجلات من خلال الفئتين 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 downstream في حال عدم وجود مراقبين أو بين وقت تبديل المراقب إلى 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). في هذا السيناريو، يُنصح بالتحقّق من الإبطال بعد التحميل وعرض LoadResult.Invalid، ما يؤدي إلى تجاهل Paging لأي طلبات تحميل معلّقة أو مستقبلية إلى PagingSource وإبطالها.

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

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

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

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

الإصدار 3.1.0-alpha02

‫1 يوليو 2021

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

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

  • تمت إضافة واجهات برمجة التطبيقات onPagesPresented listener وflow presenter التي يتم تشغيلها فورًا بعد تعديل الصفحات المعروضة في واجهة المستخدم.

    بما أنّ عمليات التحديث هذه متزامنة مع واجهة المستخدم، يمكنك استدعاء طرق المحوّل، مثل .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)

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

  • تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في عدم إرسال أحداث 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 هذه التعديلات.

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

  • توفّر مكتبة Paging الآن سجلّات من خلال فئة 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) المستخدَمَين لربط Paging بـ 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 هذه التعديلات.

تم تعديلها لتتكامل مع الإصدار alpha12 من 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

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

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

الإصدار 3.0.0-rc01

‫21 أبريل 2021

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

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

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

الإصدار 3.0.0-beta01

‫10 فبراير 2021

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

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

  • تعرض الآن برامج تضمين Rx2 وRx3 التعليقات التوضيحية التجريبية التي تعتمد عليها. إذا كنت تستخدم برامج تضمين Rx compat في 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، يتم تجاهل 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 في وسيطات عامل التحويل. تمت إزالة اللاحقة ‎-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 باستثناء طلب التحميل الأولي حيث تكون مساوية لقيمة 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)
  • تم إصلاح الخطأ الذي كان يؤدي إلى عرض القائمة السابقة (القديمة) ضمن تعديلات ListUpdateCallback في واجهات برمجة التطبيقات من جهة مقدّم العرض، مثل ‎.snapshot()‎ و‎.peek()‎ وما إلى ذلك.
  • تم إصلاح خلل كان يؤدي إلى عدم إضافة عوامل تشغيل الفواصل لرؤوس أو تذييلات عند استخدامها مع RemoteMediator
  • تم إصلاح خطأ يتعلّق بتوقُّف تعديلات LoadState إلى NotLoading لـ RemoteMediator في حالة التحميل
  • تم إصلاح خلل في واجهة برمجة التطبيقات المتوافقة مع Paging2.0، وهي .asPagingSourceFactory()، حيث كان من الممكن أن تؤدي إلى بدء تشغيل DataSource الاحتياطية على CoroutineDispatcher غير صحيح. يؤدي ذلك إلى حلّ مشكلة تعطُّل التطبيق وحالات 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 بشكل كبير. على وجه التحديد، لن تلغي مكتبة Paging بعد الآن طلب 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 هذه التعديلات.

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

  • أصبحت ميزة Paging تجلب مسبقًا الصفحات بشكل صحيح حتى عندما تتم فلترة البيانات المعروضة بشكل كبير
  • لم يعُد عرض LoadResult.Error في عملية تحميل تمت إعادة محاولتها يؤدي إلى إعادة تشغيل إعادة المحاولة بشكل غير صحيح عند الوصول إلى العناصر

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

  • نشكر "كلارا ف" على مساعدتنا في إخلاء مساحة لبعض الاختبارات. (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 نهائيًا لأنّها كانت تهدف إلى عرض حالة العناصر المعروضة في REFRESH، ولكن مع التحسينات التي تم إجراؤها على توقيت استدعاء loadState Flow / Listener وسمة itemCount، أصبحت هذه الواجهات زائدة عن الحاجة (Ia19f3)
  • تمت إضافة برامج تضمين متوافقة مع RxJava3 لكل من PagingSource وRemoteMediator (I49ef3، b/161480176)

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

  • PositionalDataSource converted into PagingSource via toPagingSourceFactory helper, including PagingSource generated by Room now correctly mark themselves to support jumping. (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)
  • تم إخفاء خيارات دالة الخريطة DataSource kotlin من Java، وذلك لحلّ الالتباس بين الخيارات الأصلية وخيارات kotlin. (If7b23، b/161150011)
  • تم وضع العلامة ‎ @JvmSynthetic على واجهات برمجة التطبيقات المكرّرة التي تهدف إلى تسهيل استخدام لغة Kotlin (I56ae5).
  • تمت إضافة عمليات تحميل زائدة لدالة الإنشاء LoadResult.Page التي تضبط itemsBefore وitemsAfter تلقائيًا على COUNT_UNDEFINED ‏ (I47849)
  • تم تعديل عوامل تشغيل PagingData الحالية لتتوافق مع طرق تعليق التنفيذ، وتمت إضافة عوامل تشغيل mapSync وflatMapSync وfilterSync الجديدة غير المعلقة للمستخدمين الذين يستعملون Java. تم نقل طرق التحويل الحالية إلى دوال الإضافة، لذا سيحتاج مستخدمو Kotlin الآن إلى استيرادها. (I34239، b/159983232)

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

  • ستعرض الآن مصادر PagingSource الخاصة بـ 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)

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

  • يتحقّق أداة التنقّل بين الصفحات الآن من إعادة استخدام 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 Library إلى الإصدار 3.0، وذلك لتفعيل العديد من الميزات الجديدة الرئيسية.

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

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

  • لا تتوفّر مستندات javadocs الخاصة بمكتبة 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 من مكتبة Paging إصلاحًا لمشكلة توسيط التحميل تم إصداره في الإصدار 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 من مكتبة Paging بدون أي تغييرات عن الإصدار 2.1.0-rc01.

الإصدار 2.1.0-rc01

‫6 ديسمبر 2018

تم إصدار الإصدار 2.1.0-rc01 من مكتبة Paging بدون أي تغييرات عن الإصدار 2.1.0-beta01.

الإصدار ‎2.1.0-beta01

‫1 نوفمبر 2018

تم إصدار الإصدار 2.1.0-beta01 من مكتبة Paging بدون أي تغييرات عن الإصدار 2.1.0-alpha01.

الإصدار 2.1.0-alpha01

‫12 أكتوبر 2018

تتضمّن ميزة Paging 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، بعد المقارنة. يتيح لك ذلك مزامنة تبديل 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 من Paging مع إصلاح خطأ واحد في runtime. ننصحك بشدة باستخدام 1.0.1 لتحقيق الثبات. تم أيضًا إصدار Paging RxJava2 1.0.1، وهو مطابق لـ 1.0.0-rc1.

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

  • تم إصلاح الأعطال التي تسبّبت في تعذُّر إرسال إشارات أحداث النقل من خلال PagedListAdapter وAsyncPagedListDiffer. b/110711937

الإصدار 1.0.0 من RxJava2

الإصدار 1.0.0-rc1 من RxJava2

‫16 مايو 2018

يتم نقل Paging RxJava2 1.0.0-rc1 إلى الإصدار المرشح بدون أي تغييرات من الإصدار الأولي.

الإصدار 1.0.0

الإصدار 1.0.0-rc1

‫19 أبريل 2018 الإصدار المحتمل من مكتبة Paging

ليس لدينا أي مشاكل معروفة أخرى أو ميزات جديدة من المقرّر طرحها في إصدار 1.0.0 الخاص بميزة "التقسيم إلى صفحات". يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1 ومساعدتنا في اختباره بدقة لنتمكّن من طرح إصدار 1.0.0 قوي.

لا يتضمّن هذا الإصدار أي تغييرات، فهو مماثل للإصدار 1.0.0-beta1.

الإصدار 1.0.0-beta1

‫5 أبريل 2018

ستكون مكتبة Paging في مرحلة تجريبية لفترة قصيرة قبل الانتقال إلى الإصدار المحتمل. لا نخطّط لإجراء المزيد من التغييرات على واجهة برمجة التطبيقات في الإصدار Paging 1.0، كما أنّ معايير أي تغييرات على واجهة برمجة التطبيقات صارمة للغاية.

تم إصدار الإصدار الأولي من RxJava2 المتوافق مع ميزة Paging كوحدة اختيارية منفصلة (android.arch.paging:rxjava2:1.0.0-alpha1) وسيتم إصدارها مؤقتًا بشكل منفصل إلى أن تستقر.

توفّر هذه المكتبة الجديدة بديلاً لـ RxJava2 لـ LivePagedListBuilder، وهي قادرة على إنشاء 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 من Paging مع الإصدار 1.1.1 من Lifecycles. بما أنّ الإصدار alpha7 من Paging يعتمد على نقل فئة Function المذكورة أعلاه، عليك تعديل تبعية lifecycle:runtime إلى android.arch.lifecycle:runtime:1.1.1.

من المقرّر أن يكون الإصدار alpha7 من Paging هو الإصدار النهائي قبل إطلاق الإصدار التجريبي من Paging.

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

  • أصبحت كائنات 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 من واجهة إلى فئة مجرّدة لتفعيل وظيفة الخريطة.

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

  • تم تغيير Builders لتكون نهائية. 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