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

تسهّل مكتبة الترحيل تتمكن من تحميل البيانات تدريجيًا وبسلاسة داخل RecyclerView:

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

العناصر الإصدار المستقر سحب المرشح الإصدار التجريبي إصدار أولي
الترحيل-* 3.3.1 - - -
إنشاء صفحات 3.3.1 - - -
تم إجراء آخر تعديل لهذه المكتبة في 24 يوليو 2024.

إعلان التبعيات

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

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

رائع

dependencies {
  def paging_version = "3.3.1"

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

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

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

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

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

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

Kotlin

dependencies {
  val paging_version = "3.3.1"

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

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

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

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

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

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

لمزيد من المعلومات حول استخدام إضافات Kotlin، يمكنك الاطّلاع على مستندات ktx

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

ملاحظات

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

إنشاء عدد جديد

يُرجى الاطّلاع على مستندات أداة تتبُّع المشاكل. لمزيد من المعلومات.

الإصدار 3.3

الإصدار 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 بدلاً من طلب واجهات برمجة تطبيقات التقسيم الداخلية أو AsyncPagingDataDiffer في paging-runtime.
  • تمت إضافة طريقتَي المساعدة LoadStates وCombinedLoadStates الجديدتَين في hasError وisIdle للتحقّق مما إذا كانت LoadStates في حالة خطأ أو NotLoading على التوالي. تمت أيضًا إضافة طريقة جديدة للإضافة awaitNotLoading() Kotlin على Flow<CombinedLoadStates> للانتظار حتى يستقر التحميل على حالة NotLoading أو خطأ.
  • ترسل PagingData.empty() الآن حالات NotLoading تلقائيًا ما لم يتم تمرير LoadStates المخصّص إلى طريقة الإنشاء الخاصة ��ها. وينحد هذا الإجراء عن السلوك الحالي الذي لا يرسِل LoadStates عند إرساله إلى PagingDataAdapter أو يرسل حالات التحميل عند جمع البيانات على أنّها LazyPagingItems. عند جمع البيانات على أنّها LazyPagingItems، ستُعرض أيضًا قائمة فارغة فور إنشاء الحملة.

توافق Kotlin متعدد الأنظمة الأساسية

يتيح نظام الترحيل الآن شحن العناصر المتوافقة مع Kotlin Multiplatform، ويرجع الفضل في ذلك إلى حد كبير إلى العمل المنقول من مشروع نقل البيانات على أنظمة أساسية متعددة في CashApp.

  • تم نقل جميع واجهات برمجة تطبيقات Paging 3 إلى common من قِبل "paging-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. يحتوي الإصدار 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 على عمليات التنفيذ هذه.

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

  • تستخدم عملية الترحيل الآن التعليق التوضيحي @MainThread للتعليق التوضيحي AndroidX للرمز الشائع. (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 بدلاً من طلب واجهات برمجة تطبيقات التقسيم الداخلية أو AsyncPagingDataDiffer في paging-runtime. (Id1f74، b/315214786)
  • تمت إضافة طريقتَي مساعدتَين جديدتَين LoadStates وCombinedLoadStates للتحقّق مما إذا كان LoadStates في حالة خطأ أو 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 متعدد الأنظمة الأساسية

يتيح نظام الترحيل الآن شحن العناصر المتوافقة مع Kotlin Multiplatform، ويرجع الفضل في ذلك إلى حد كبير إلى العمل المنقول من مشروع نقل البيانات على أنظمة أساسية متعددة في CashApp. وسيتيح لنا ذلك تجنُّب التباعد بين مستودعَين والحفاظ على توافقهما.

  • تم نقل جميع واجهات برمجة تطبيقات Paging 3 إلى common من قِبل "paging-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 فقط.

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

  • لقد تم نهائيًا إيقاف واجهة أداة التسجيل المتاحة للجميع التي كانت مخصّصة للاستخدام الداخلي فقط (I16e95 وb/288623117).

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

  • .

الإصدار 3.3.0-alpha01

20 أيلول (سبتمبر) 2023

  • هذا هو أول إصدار متعدد الأنظمة لمكتبات androidx.paging. لا يحتوي هذا الإصدار إلا على *-jvm و*-android عنصر. بالنسبة إلى أنظمة التشغيل macOS وiOS وlinux، يمكنك استخدام 3.3.0-alpha02.

الإصدار 3.2

الإصدار 3.2.1

6 أيلول (سبتمبر) 2023

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

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

  • تم إصلاح مشكلة تعليق واجهة برمجة التطبيقات asSnapshot() لعنصر اختبار الصفحات عند اجتياز مسار تم إنشاؤه باستخدام PagingData.from(List) لأنّ asSnapshot() لن يحتوي على أي معلومات عند انتهاء التحميل (على عكس الحمل الزائد على PagingData.from(List, LoadStates)). لا يعمل هذا الحل إلا مع التدفقات القابلة للتكامل (مثل، flowOf(PagingData.from(...))). للتدفقات غير القابلة للتكامل (مثل MutableStateFlow، يمكنك استخدام حِمل PagingData.from الزائد الذي يوفّر LoadStates). (I502c3)
  • تستخدم ميزة "إنشاء الصفحات" الآن AndroidUiDispatcher.Main داخليًا لضمان توفّر البيانات الجديدة في الإطار نفسه الذي يكتمل فيه التحميل. (Ia55af)

الإصدار 3.2.0

26 تموز (يوليو) 2023

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

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

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

الإصدار 3.2.0-rc01

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

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

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

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

الإصدار 3.2.0-beta01

7 حزيران (يونيو) 2023

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

إنشاء الصفحات

  • وصلت ميزة "إنشاء الصفحات" رسميًا إلى استقرار واجهة برمجة التطبيقات. بالتالي، تم تحديث الإصدار من 1.0.0-alpha20 ليتطابق الآن مع إصدار جميع عناصر الترحيل الأخرى.

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

  • تمت إزالة واجهتَي برمجة تطبيقات items(LazyPagingItems) وitemsIndexed(LazyPagingItems) المتوقّفة نهائيًا من ميزة "إنشاء الصفحات". يمكنك الاطّلاع على ملاحظات الإصدار 1.0.0-alpha20 لإنشاء الصفحات للحصول على مثال على واجهات برمجة التطبيقات البديلة. (I9626e)

الإصدار 3.2.0-alpha06

24 أيار (مايو) 2023

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

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

  • تمت إضافة واجهة PagingSourceFactory وظيفية جديدة توفّر واجهة برمجة تطبيقات أكثر وضوحًا من واجهة برمجة التطبيقات () -> PagingSource الحالية. يمكن استخدام هذا المصنع لإنشاء مثيل Pager. (I33165، b/280655188)
  • تمت إضافة واجهة برمجة تطبيقات paging-testing جديدة من List<Value>.asPagingSourceFactory() للحصول على PagingSourceFactory يتم تحميلها فقط من قائمة بيانات غير قابلة للتغيير. يجب استخدام الإضافة الحالية على Flow<List<Value>> للاختبار من خلال أجيال متعددة من البيانات الثابتة. (Id34d1، b/280655188)

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

  • تتم الآن إضافة تعليقات توضيحية إلى جميع واجهات برمجة التطبيقات المتاحة للجميع في اختبار الصفحات باستخدام @VisibleForTesting لضمان استخدام واجهات برمجة التطبيقات هذه في الاختبارات فقط. (I7db6e)
  • لم تعُد واجهة برمجة التطبيقات asSnapshot تتطلب إدخال CoroutineScope. والآن يتم ضبط الإعدادات التلقائية على استخدام السياق المكتسَب من نطاقها الرئيسي. (Id0a78، b/282240990)
  • إعادة ترتيب معلمات الدالة الإنشائية TestPager لمطابقة ترتيب معلمات الدالة الإنشائية Pager الحقيقية (I6185a)
  • تم نقل بيانات استخدام اختبار الصفحات في نوع 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>> ليتم توفيره إلى جهاز نداء. تمثّل كل List<Value>> الصادرة من التدفق جيلاً من البيانات المقسّمة إلى صفحات. ويسهِّل ذلك إجراء اختبارات الصفحات على عمليات تحويل PagingData، على سبيل المثال، من خلال تزوير مصدر بيانات لكي يجمع جهاز النداء منه. (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 وIb29b9 وIb29b9 وI2249f وI2249f.

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

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

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

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

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

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

  • تتيح هذه السياسة تفعيل التكرار المريح من خلال LoadResult.Page.data إلى LoadResult.Page.iterator(). ويسمح ذلك بشكل غير مباشر باستخدام طريقة flatten الخاصة بمكتبة Kotlin العادية عند إعطائها 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 api (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 من عملية الترحيل تنتظر الآن قيمًا صالحة من كل من PagingSource وRemoteMediator قبل إطلاقها. في بعض الحالات، ستبدأ الأجيال الجديدة من PagingData دائمًا بشكل صحيح باستخدام Loading لحالة إعادة التحميل بدلاً من إعادة الضبط على NotLoading بشكل غير صحيح.
    • لم يعد كل من .loadStateFlow و.addLoadStateListener ع��ى واجهات برمجة ��طبيقات العرض يرسلان CombinedLoadStates أولية يتم ضبطها دائمًا على null
  • يحدث إلغاء الأجيال السابقة الآن بشغف بسبب حالات الإبطال أو الأجيال الجديدة. لم يعُد من الضروري استخدام .collectLatest على Flow<PagingData>، إلا أنّنا لا نزال ننصح باستخدامها.
  • تمت إضافة PagingSource.LoadResult.Invalid كنوع إرجاع جديد من PagingSource.load، ما يتسبب في تجاهل أي طلبات تحميل معلَّقة أو مستقبلية إلى PagingSource هذه وإبطالها. تم تصميم نوع الإرجاع هذا للتعامل مع البيانات التي يُحتمل أن تكون غير صالحة أو قديمة والتي يمكن عرضها من قاعدة البيانات أو الشبكة.
  • تمت إضافة واجهتَي برمجة تطبيقات للمقدِّم .onPagesPresented و.addOnPagesUpdatedListener، اللذَين تم تشغيلهما بشكلٍ متزامن عند عرض الصفحات في واجهة المستخدم. ويمكن أن يتم تعديل الصفحات في الحالات التالية:
    • يكتمل التحميل الأولي للإصدار الجديد من PagingData، بغض النظر عمّا إذا كان الإصدار الجديد يحتوي على أي تغييرات على العناصر المعروضة. بعبارة أخرى، بالنسبة إلى الجيل الجديد الذي يكتمل التحميل الأوّلي بدون أي تعديلات، لأنّ القائمة هي نفسها تمامًا سيستمر تشغيل عملية معاودة الاتصال هذه.
    • يتم إدراج صفحة حتى إذا كانت الصفحة المدرَجة لا تحتوي على عناصر جديدة.
    • يتم إسقاط الصفحة، حتى إذا كانت الصفحة التي تم إفلاتها فارغة.

الإصدار 3.1.0-rc01

3 تشرين الثاني (نوفمبر) 2021

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

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

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

الإصدار 3.1.0-beta01

13 تشرين الأول (أكتوبر) 2021

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

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

  • تم إصلاح مشكلة تسبب العديد من عمليات الوصول السريعة إلى العناصر في إسقاطها في الاعتبار أثناء عملية الجلب المسبق للمسافة، ما يتسبّب في توقّف عمليات تحميل الصفحات. وهذه مشكلة خاصة عندما يتم وضع العديد من العناصر في وقت واحد بترتيب يمنح الأولوية للتحميل في ضوء اتجاه التمرير لدى المستخدم. ويتم الآن تخزين عمليات الوصول إلى العناصر هذه مؤقتًا وترتيبها حسب الأولوية بشكل متزامن لمنع تجاهلها. (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. في ��لسابق، كان من الممكن تم الوصول إلى endOfPagination to true for RemoteMediator REFRESH، ولكن ليس لـ PagingSource. يتم الآن دمج هذا السلوك للعودة دائمًا false إذ ليس من المنطقي أن تكون وظيفة REFRESH طرفية، كما هي الآن موثقة كجزء من عقد واجهة برمجة التطبيقات في LoadStates. عند تحديد ما إذا كان يتم إنهاء التقسيم على صفحات، فيجب عليك دائمًا إجراء ذلك في ما يتعلق إما توجيه "APPEND" أو "PREPEND". (I047b6)
  • LoadStates من Paging بانتظار الآن قيم صالحة من كليهما PagingSource وRemoteMediator قبل إرسال تدفق انتقال البيانات بين الأجيال. يمنع ذلك الأجيال الجديدة من إرسال بيانات PagingData يجب عدم التحميل في ManagedLoadStates.source.refresh إذا كان من قبل. جارٍ التحميل سوف تبدأ الآن الأجيال الجديدة من بيانات PagingData بشكل صحيح مع "التحميل لحالة التحديث" بدلاً من إعادة الضبط أولاً على 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 ثالث LoadResult.Inactive إلى PagingSource. عند إرجاع PagingSource.load LoadResult.غير صالح، سيؤدي الترحيل إلى تجاهل البيانات التي تم تحميلها إلغاء صلاحية PagingSource. تم تصميم نوع الإرجاع هذا معالجة البيانات التي يُحتمل أن تكون غير صالحة أو قديمة والتي يمكن عرضها من قاعدة البيانات أو الشبكة.

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

    إنّ نوع الإرجاع هذا متاح أيضًا في Paging2 API التي تستفيد من LivePagedList أو RxPagedList. عند استخدام PagingSource مع لواجهات برمجة تطبيقات PagedList لـ Paging2، يتم فصل PagedList على الفور، إيقاف المزيد من المحاولات لتحميل البيانات في قائمة الصفحات هذه تؤدي إلى إلغاء الاشتراك على PagingSource.

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

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

  • عمليات معاودة الاتصال بالإبطال التي تمت إضافتها عبر PagingSource.registercertifiedatedCallback أو يتم الآن تشغيل DataSource.addInappropriateatedCallback تلقائيًا في حال: المُسجلة على 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، لن تعرض الخطأ UnknownStateException (I96707)

الإصدار 3.1.0-alpha01

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

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

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

  • أصبحت الصفوف التي تقدّمها paging-rxjava3 متاحة الآن ضمن حزمة androidx.paging.rxjava3 بحيث لا تتعارض مع paging-rxjava2 (Ifa7f6)

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

  • تم إصلاح المشكلة التي كانت تتسبب أحيانًا في إرسال حالة عدم التشغيل أثناء التنقل بين الصفحات الأحداث في RecyclerView، ما قد يؤدي إلى تشغيل بعض برامج معالجة البيانات مبكرًا. (Ic507f، b/182510751)

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

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

الإصدار 1.0.0 من ميزة إنشاء الصفحات

الإصدار 1.0.0-alpha20

24 أيار (مايو) 2023

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

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

  • تتيح ميزة "إنشاء الصفحات" الآن معاينة قائمة بالبيانات المزيفة من خلال إنشاء PagingData.from(fakeData) والتفاف PagingData في MutableStateFlow (على سبيل المثال، MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). وباستخدام هذه البيانات كإدخال في @Preview، ستوفّر المكالمات الواردة إلى collectAsLazyPagingItems() قيمة LazyPagingItems قابلة للمعاينة. (I8a78d، b/194544557)

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

  • إنّ البيانات المخزَّنة مؤقتًا من "pager.flow.cachedIn" التي تم جمعها في "LazyPagingItems" ستصبح الآن متوفّرة على الفور بعد استعادة الحالة بدون الحاجة إلى جمع غير متزامن. يعني هذا أنّ البيانات المخزّنة مؤقتًا ستكون جاهزة للعرض على الفور بعد استعادة الحالة. (I97a60، b/177245496)

الإصدار 1.0.0-alpha19

3 أيار (مايو) 2023

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

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

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

لإتاحة المزيد من التنسيقات الكسولة، احتجنا إلى إنشاء واجهات برمجة تطبيقات بطبقة مختلفة، بدلاً من توفير واجهة items API مخصَّصة لكل تنسيق غير نشط، توفّر ميزة "إنشاء الصفحات" الآن طرق إضافة ذات مستوى أدنى قليل��ً على 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 أطول ببضعة أسطر، وجدنا أنّ الاتساق بين كل التنسيقات الكسولة هو عامل مهم بالنسبة إلى مستخدمي ميزة "الكتابة أثناء التنقل" من الآن فصاعدًا. لهذا السبب، تم إيقاف الإضافات الحالية للإضافة "LazyListScope". (I0c459 وI92c8f وb/276989796)

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

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

التحديثات المتعلقة بالاعتمادية

  • تم تعديل تبعية ميزة "إنشاء التنقل" من Compose 1.0.5 إلى Compose 1.2.1. (Ib1918، b/255283378)

الإصدار 1.0.0-alpha18

8 شباط (فبراير) 2023

تم طرح androidx.paging:paging-compose:1.0.0-alpha18 بدون أي تغييرات. يحتوي الإصدار 1.0.0-alpha18 على هذه عمليات التنفيذ.

الإصدار 1.0.0-alpha17

24 تشرين الأول (أكتوبر) 2022

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

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

  • يمكنك إضافة دعم لـ "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 على هذه عمليات التنفيذ.

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

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

التوافق مع إنشاء الرسائل

  • يتوافق "androidx.paging:paging-compose:1.0.0-alpha09" فقط مع الإصدار 1.0.0-beta07 والإصدارات الأحدث من ميزة إنشاء الرسائل.

الإصدار 1.0.0-alpha08

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

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

تم التعديل للدمج مع Compose 1.0.0-beta01.

الإصدار 1.0.0-alpha07

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

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

تم التعديل للدمج مع Compose alpha12.

الإصدار 1.0.0-alpha06

28 يناير 2021

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

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

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

  • تم التعديل ليتطابق مع Compose 1.0.0-alpha08.

الإصدار 1.0.0-alpha02

11 تشرين الثاني (نوفمبر) 2020

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

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

  • تمت إضافة طرق .peek() و.snapshot() و.retry() و.refresh() إلى LazyPagingItemتعرض الوظائف نفسها المتوفرة في 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 التكامل بين The Paging Library وJetpack Compose. مثال على الاستخدام البسيط:

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

الإصدار 3.0.1

الإصدار 3.0.1

21 يوليو 2021

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

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

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

الإصدار 3.0.0

الإصدار 3.0.0

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

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

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

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

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

الإصدار 3.0.0-rc01

21 نيسان (أبريل) 2021

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

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

  • تم إصلاح المشكلة التي كانت تتسبب أحيانًا في إرسال حالة عدم التشغيل أثناء التنقل بين الصفحات الأحداث في RecyclerView، ما قد يؤدي إلى تشغيل بعض برامج معالجة البيانات مبكرًا. (Ic507f، b/182510751)

الإصدار 3.0.0-beta03

24 آذار (مارس) 2021

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

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

  • لقد جددنا كيفية التعامل مع العناصر النائبة عندما تكون إعادة التحميل لمنع الانتقالات غير المتوقعة في RecyclerView. عرض NullPaddedDiffing.md للاطّلاع على التفاصيل. (If1490 وb/170027529 وb/177338149)
  • لم تعُد منصات إنشاء 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، عند استخدامه عبر مسارات التوافق، يتم تشغيله بشكل صحيح الآن على SpamDispatcher بدلاً من سلسلة التعليمات الرئيسية. يؤدي ذلك إلى إصلاح IllegalStateException بسبب وصول قاعدة البيانات إلى سلسلة التعليمات الرئيسية عند استخدام تنفيذ PagingSource في الغرفة.

الإصدار 3.0.0-alpha13

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

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

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

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

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

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

الإصدار 3.0.0-alpha12

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

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

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

  • لم تعد قيمة DeagingPagingSource يمكنها فئة مجردة لأنها لم تستخدم مطلقًا أي طرق مجردة. (I4a8c4)
  • تمت إضافة حمل زائد لـ .cachedIn() يقبل استخدام ViewModel بدلاً من Lifecycle أو CoroutineScope لمستخدمي Java. (I97d81، b/175332619)
  • السماح لمتصلي Java باستخدام عمليات تحويل PagingData في بطريقة غير متزامنة، من خلال قبول المُنفِّذ إلى مشغل تحويل الوسيطة. تستخدم جميع عوامل تشغيل التحويل -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 دالة مفتوحة. إذا كنت إلى تلقّي إشعارات عند إلغاء الاشتراك، يمكنك طريقة مسجّلة غير صالحة لمعاودة الاتصال بدلاً من إلغاء المصادقة غير الصالحة. (I628d9، وb/173029013، وb/137971356)
  • تضم جهاز النداء الآن دالة إنشاء تجريبية واحدة إلى جانب الدوال الإنشائية العادية، بدلاً من تسريب واجهات برمجة التطبيقات التجريبية إلى واجهة برمجة تطبيقات عامة غير تجريبية عبر التعليق التوضيحي للتفعيل. (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 بدون استخدام جهاز نداء أو PagedList، قد لا تتطابق السمة pageSize مع PagingConfig.pageSize في حال يتم أيضًا ضبط initialLoadSize. إذا كان من المهم يمكنك استخدام أداة Pager/PagedList بدلاً منها، حيث يتم تعيين حجم الصفحة الصحيح لطرق تحميل مصدر البيانات. (I98ac7، b/149157296)

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

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

الإصدار 3.0.0-alpha10

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

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

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

  • تمت إزالة واجهتَي برمجة التطبيقات dataRefreshFlow وdataRefreshListener المتوقّفتَين نهائيًا. لأنها متكررة مع تحديثاتloadStateFlow / Listener. بالنسبة المكافئة لـloadStateFlow:

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

    (Ib5570، b/173530908)

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

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

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

  • تمت إضافة فئة مجردة جديدة وهي SpamtingPagingSource يمكنها. باستخدام واجهة برمجة تطبيقات .invalidate() تعيد توجيه الإلغاء إلى جميع PagingSources التي تنبعث منها. شكرًا لـ @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 تمامًا باستخدام الاستبدال مع. (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)

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

  • تم تحسين تفاعل الصفحات مع ViewPager بشكل كبير. وعلى وجه التحديد، لن يؤدي الترحيل إلى إلغاء استدعاء الدالة RemoteMediator#load بسبب إيقاف الصفحة. كما أنه لن يقدم طلب إلحاق أو بداية تحميل بعد الآن، إذا كان الأمر "تحديث" مطلوبًا، حتى يكتمل طلب "إعادة التحميل" بنجاح. (I6390b، b/162252536)
  • تم تفعيل "فحص أداة Lint API" لـ LostGetterMatchingBuilder لنظام التشغيل 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 على هذه عمليات التنفيذ.

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

  • تقبل المشغلات غير المتزامنة PagingData المستندة إلى Java الآن أداة تنفيذ كمعلّمة للتحكّم في سياق التنفيذ (Id4372)

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

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

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

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

الإصدار 3.0.0-alpha06

2 أيلول (سبتمبر) 2020

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

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

  • UnsupportedOperationException باستخدام رسائل أوضح حول يحدث الآن عدم توافق المعرّفات الثابتة كلما PagingDataAdapter.setHasStableIds يَحْمِلُ الِاسْمْ. (Ib3890، b/158801427)

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

  • لم تعد أداة InsertSeparters تعمل على فلترة الصفحات الفارغة مما يسمح جلب المسافة مسبقًا ليحترمها مقدم العرض حتى في الحالات التي يتم إدراج العديد من الصفحات الفارغة. (I9cff6، b/162538908)

الإصدار 3.0.0-alpha05

19 آب (أغسطس) 2020

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

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

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

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

  • شكرًا لسميرة سميرة على المساعدة في إكمال بعض الاختبارات. (549612)

الإصدار 3.0.0-alpha04

5 آب (أغسطس) 2020

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

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

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

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

  • تم تحويل PositionalDataSource إلى PagingSource عبر مساعد toPagingSourceFactory، بما في ذلك PagingSource الذي تم إنشاؤه من خلال الغرفة الآن تشير إلى نفسها بشكل صحيح لدعم القفز. (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، لحل الغموض بين المتغيرات الأصلية والنسخة الكوتلينية. (If7b23 وb/161150011)
  • واجهات برمجة التطبيقات المتكررة والمخصصة كوسائل راحة لمستخدمي Kotlin تم وضع علامة @JvmSynthetic (I56ae5)
  • تمت إضافة أحمال زائدة للدالة الإنشائية لـ LoadResult.Page. الذي يقوم افتراضيًا بـ itemsBefore وitemafter إلى COUNT_UNDEFINED (I47849)
  • تم جعل عوامل تشغيل بيانات PagingData الحالية تقبل طرق التعليق وقدّمت ميزات جديدة مثل mapSync وflaMapSync وfilterSync غير المعلقة. المشغلات لمستخدمي Java. وتم استخدام طرق التحويل الحالية انتقلنا إلى دوال الإضافة، وبالتالي سيحتاج مستخدمو Kotlin الآن إلى استيرادها. (I34239، b/159983232)

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

  • ستصبح ميزة PagingSources للغرفة (وPositionalDataSource) متاحة الآن عرض فاصل بادئ كجزء من الصفحة الأولى، بحيث يمكن لا يحتاج إلى التمرير للكشف عنه. (I6f747، b/160257628)
  • إذن الوصول إلى العناصر النائبة الآن تشغيل عمليات تحميل PagingSource بشكل صحيح حتى يتم إرجاع صفحة تفي بالفهرس المطلوب بعد التحويل باستخدام PagingData.filter() (I95625, b/158763195)
  • إصلاح خلل يتمثّل في التمرير أحيانًا تعرض PagingSource خطأً قد يمنع PagingDataAdapter.retry(). من إعادة المحاولة. (I1084f، b/160194384)
  • حل مشكلة تتعلق بإمكانية الوصول إلى العنصر بعد إسقاط صفحة عدم تحميل الصفحات على الرغم من أن الوصول إلى العنصر كان ضمن مسافة الجلب المسبق (Ie95ae، b/160038730)
  • لم يعُد إعداد PagingConfig.maxSize يؤدي إلى تفعيل العناصر النائبة. بعد حدث الانخفاض (I2be29، b/159667766)

الإصدار 3.0.0-alpha02

24 حزيران (يونيو) 2020

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

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

  • تمت إضافة أحمال زائدة لدالة إنشاء PagingConfig بالقيم التلقائية الشائعة (I39c50، b/158576040)
  • تمت إضافة أحمال زائدة لدوال إنشاء PagingDataAdapter و AsyncPagingDataDiffer ب��يم تلقائية شائعة (Ie91f5)
  • واجهات برمجة التطبيقات للمحوّلات، dataRefreshFlow وdataRefreshListener نمرر الآن قيمة منطقية للإشارة إلى ما إذا كانت PagingData فارغة أم لا (I6e37e، b/159054196)
  • تمت إضافة واجهتَي برمجة تطبيقات RxJava وJava لـ RemoteMediator - RxRemoteMediator وListenableFutureRemoteMediator
  • تمت إضافة أدوات مساعدة إلى PagingState للوصول إلى العناصر الشائعة، مثل isEmpty() وfirstItemOrNull() (I3b5b6، b/158892717).

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

  • يتحقّق جهاز النداء الآن من إعادة استخدام PagingSource في المصنع، وذلك لمنع إعادة الاستخدام غير المقصود لمصادر PagingSources غير الصالحة، والتي أدّت إلى ظهور خطأ غير واضح (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 على هذه عمليات التنفيذ.

تم تحديث مكتبة الصفحات إلى الإصدار 3.0 لتفعيل العديد من الميزات الرئيسية الجديدة.

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

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

  • الصفحة 3 من javadocs غير متاحة بعد. وحتى ذلك الحين، يُرجى استخدام الأدلة المُدرَجة أعلاه أو مستندات Kotlin. (b/158614050)

الإصدار 2.1.2

الإصدار 2.1.2

18 آذار (مارس) 2020

تم طرح androidx.paging:paging:2.1.2. يحتوي الإصدار 2.1.2 على هذه الالتزامات ضد 2.1.0.

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

  • حل المشكلة "IndexOutOfBoundsException" في حالات نادرة عند تحويل موضع أثناء إبطاله.

مشكلة في الإصدار

  • تم إصدار إصدار الصفحات 2.1.1 بشكل غير صحيح من فرع تم إعداده بشكل غير صحيح، ويعرض واجهات برمجة التطبيقات والوظائف التي تم تنفيذها جزئيًا في إصدار مستقبلي.

  • تحتوي صفحات 2.1.2 على إصلاح توسيط التحميل الذي تم إصداره في الأصل في 2.1.1، ولكن تم اختياره هذه المرة بشكل صحيح أعلى الإصدار 2.1.0. ننصحك بشدة بالترقية إلى هذا الإصدار إذا كنت تستخدم حاليًا الإصدار 2.1.1.

الإصدار 2.1.1

الإصدار 2.1.1

18 كانون الأول (ديسمبر) 2019

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

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

  • تتمحور الآن عمليات التحميل المبدئية المتجاورة من PositionalDataSources حول آخر وصول عند إيقاف العناصر النائبة

الإصدار

الإصدار

25 كانون الثاني (يناير) 2019

تم تحرير صفحة 2.1.0 بدون أي تغييرا�� من 2.1.0-rc01.

الإصدار 2.1.0-rc01

6 كانون الأول (ديسمبر) 2018

تم تحرير صفحة 2.1.0-rc01 بدون أي تغييرات من 2.1.0-beta01.

الإصدار 2.1.0-beta01

1 تشرين الثاني (نوفمبر) 2018

تم تحرير صفحة 2.1.0-beta01 بدون أي تغييرات من 2.1.0-alpha01.

الإصدار 2.1.0-alpha01

12 تشرين الأول (أكتوبر) 2018

تشمل عملية تغيير الصفحة 2.1.0-alpha01 إضافتَين رئيسيتَين�� ��م�� ��س��ا�� الصفحة ومكتبات إضافات KTX لكل العناصر، بالإضافة إلى العديد من التغييرات الأخرى وإصلاحات الأخطاء في واجهة برمجة التطبيقات.

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

  • تمت إضافة PagedList.Config.Builder.setMaxSize() للحدّ من عدد العناصر التي تم تحميلها في الذاكرة.
  • تمت إضافة اللغة androidx.paging.Config() كبديل للغة PagedList.Config.Builder بلغة Kotlin.
  • تمت إضافة اللغة androidx.paging.PagedList() كبديل للغة PagedList.Builder بلغة Kotlin.
  • تمت إضافة اللغة DataSourceFactory.toLiveData() كبديل للغة LivePagedListBuilder بلغة Kotlin.
  • تمت إضافة 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

بالنسبة إلى الإصدارات التي تلي ذلك قبل 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" لتحقيق الاستقرار. تم أيضًا إصدار Paing RxJava2 1.0.1، ويتطابق مع 1.0.0-rc1.

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

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

الإصدار 1.0.0 من RxJava2

RxJava2 الإصدار 1.0.0-rc1

16 أيار (مايو) 2018

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

الإصدار 1.0.0

الإصدار 1.0.0-rc1

19 نيسان (أبريل) 2018 المرشح لتحرير ترتيب الصفحات

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

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

الإصدار 1.0.0-beta1

5 نيسان (أبريل) 2018

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

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

توفر هذه المكتبة الجديدة بديلاً 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 الأولي على برنامج التنفيذ المحدّد، بدلاً من مجموعة سلاسل محادثات IO لمكونات Arc.

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

الإصدار 1.0.0-alpha7

21 آذار (مارس) 2018

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

من المقرَّر أن يكون الإصدار alpha7 من الصفحات هو الإصدار النهائي قبل تنفيذ الإصدار التجريبي من عملية الترحيل.

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

  • تحتوي DataSource.LoadParams عناصر الآن على دالة إنشاء عامة، وأصبحت عناصر DataSource.LoadCallback مجردة الآن. يتيح ��لك إكمال DataSource أو اختبار DataSource مباشرةً باستخدام معاودة اتصال وهمية. b/72600421
  • مصممو الخرائط لـ DataSource وDataSource.Found
    • يسمح لك map(Function<IN,OUT>) بتحويل النتائج التي تم تحميلها من خلال DataSource أو التفافها أو تزيينها.
    • ويفعِّل mapByPage(<List<IN>,List<OUT>>) الإجراء نفسه للمعالجة على دفعات (على سبيل المثال، إذا كانت العناصر التي تم تحميلها من SQL بحاجة إلى الاستعلام عن قاعدة بيانات منفصلة بالإضافة إلى ذلك، يمكن تنفيذ ذلك على دفعة واحدة).
  • تمت إضافة PagedList#getDataSource() كطريقة دفع سريعة. b/72611341
  • تمت إزالة جميع الفئات المتوقّفة نهائيًا من واجهة برمجة التطبيقات، بما في ذلك ما تبقى من حزمة recyclerview.extensions وLivePagedListProvider.
  • تم تغيير DataSource.Factory من واجهة إلى فئة مجردة لتفعيل وظيفة الخريطة.

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

  • تم تغيير منصات الإنشاء لتكون نهائية. b/70848565
  • تم إصلاح تنفيذ الغرفة DataSource الآن للتعامل مع طلبات البحث عبر الجداول المتعددة - تم تضمين هذا الحلّ في الغرفة 1.1.0-الإصدار التجريبي 1، يُرجى الاطّلاع أعلاه.
  • تم إصلاح الخطأ المتمثل في عدم استدعاء BoundaryCallback.onItemAtEndLoaded لـ PositionalDataSource في حال تفعيل العناصر النائبة الحجم الإجمالي هو مضاعف دقيق لحجم الصفحة.

الإصدار 1.0.0-alpha5

22 كانون الثاني (يناير) 2018

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

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