ترقيم الصفحات
يسرد هذا الجدول جميع العناصر في المجموعة androidx.paging.
| العناصر | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
|---|---|---|---|---|
| paging-* | 3.3.6 | - | - | 3.4.0-alpha04 |
| paging-compose | 3.3.6 | - | - | 3.4.0-alpha04 |
تحديد الاعتماديات
لإضافة اعتمادية على Paging، يجب تضمين مستودع Google Maven في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:
Groovy
dependencies { def paging_version = "3.3.6" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.4.0-alpha04" }
Kotlin
dependencies { val paging_version = "3.3.6" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.4.0-alpha04") }
للحصول على معلومات حول استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات KTX.
لمزيد من المعلومات حول الاعتماديات، يُرجى الاطّلاع على إضافة اعتماديات البناء.
الملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.
يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.
الإصدار 3.4
الإصدار 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)
تغييرات واجهة برمجة التطبيقات
- تغيير الحد الأدنى التلقائي لإصدار Android من المستوى 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 يوليو 2022
تم طرح androidx.paging:paging-*:3.4.0-alpha01. يتضمّن الإصدار 3.4.0-alpha01 هذه التعديلات.
الميزات الجديدة
- أضافت مكتبة Paging أهداف KMP التالية: watchos وtvos وmingwX64 وwatchosDeviceArm64 وlinuxArm64. (I237dd وIa62b3 وb/368046982 وIcf15d وb/364652024 وI139d3 وb/338268719)
إصلاح الأخطاء
- لن يتم بعد الآن عرض استثناءات من
PagingLoggerعند استدعاء اختبارات الوحدات في Android للإصدار 3.3 أو إصدار أحدث من مكتبة Paging (Ia9400، b/331684448). - تم إصلاح الخطأ الذي كان يؤدي إلى عرض
RecyclerViewللرسالةIndexOutOfBoundsExceptionعندما يمرّر المستخدم الشاشة أثناء تعديلRecyclerView(Id1f16، b/381024738) - تم إصلاح الخطأ الذي تسبّب في عدم إمكانية تشغيل المزيد من عمليات التحميل عند إعادة التحميل أثناء التمرير. (I60ca5، b/352586078)
- تم إصلاح مشكلة التعطُّل عند التمرير أثناء إعادة تحميل عناصر التقسيم إلى صفحات. (I8c65a، b/347649763)
الإصدار 3.3
الإصدار 3.3.6
12 فبراير 2025
تم طرح androidx.paging:paging-*:3.3.6. يتضمّن الإصدار 3.3.6 هذه التعديلات.
إصلاح الأخطاء
- سيتم الآن تخزين إشارات إعادة المحاولة وإعادة التحميل التي يتم إرسالها أثناء عملية إعادة تحميل أولية وإعادة إرسالها تلقائيًا عندما يصبح عارض التصفُّح جاهزًا.
المساهمة الخارجية
الإصدار 3.3.5
11 ديسمبر 2024
تم طرح androidx.paging:paging-*:3.3.5. يتضمّن الإصدار 3.3.5 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يتسبّب في عرض
RecyclerViewللرسالةIndexOutOfBoundsExceptionعندما يتصفّح المستخدم أثناء تعديلRecyclerView. (Id1f16، b/381024738)
الإصدار 3.3.4
13 نوفمبر 2024
تم طرح androidx.paging:paging-*:3.3.4. يتضمّن الإصدار 3.3.4 هذه التعديلات.
إصلاح الأخطاء
- لن تؤدي اختبارات الوحدة على Android التي تستخدم الإصدار 3.3 أو إصدارًا أحدث من مكتبة Paging إلى ظهور خطأ مثل
Method isLoggable in android.util.Log not mocked. (Ia9400، b/331684448)
الإصدار 3.3.2
7 أغسطس 2024
تم طرح androidx.paging:paging-*:3.3.2. يتضمّن الإصدار 3.3.2 هذه التعديلات.
الميزات الجديدة
- أضافت
paging-commonوpaging-testingأهدافًا جديدة من Kotlin Multiplatform، وهي:watchosوtvosوlinuxArm64(90c9768)، (53e0eca).
الإصدار 3.3.1
24 يوليو 2024
تم طرح androidx.paging:paging-*:3.3.1. يتضمّن الإصدار 3.3.1 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم إمكانية تشغيل المزيد من عمليات التحميل عند إعادة تحميل مصدر البيانات الأساسي أثناء التمرير، وذلك في
AsyncPagingDataDifferأو واجهات برمجة التطبيقات المستندة إليه، مثلPagingDataAdapterالمستخدَم معRecyclerView. (I60ca5، b/352586078) - تم إصلاح عُطل يحدث عند إزالة عناصر من مصدر البيانات الأساسي أثناء التمرير في
RecyclerViewباستخدامPagingDataAdapterأوAsyncPagingDataDiffer. (I8c65a، b/347649763)
الإصدار 3.3.0
14 مايو 2024
تم طرح androidx.paging:paging-*:3.3.0. يتضمّن الإصدار 3.3.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.2.0
PagingDataPresenterهو الآن صف علني. يمكن الآن إنشاء أدوات العرض المتوافقة مع منصات متعددة استنادًا إلىPagingDataPresenterبدلاً من الحاجة إلى واجهات برمجة تطبيقات داخلية خاصة بالتقسيم إلى صفحات أوpaging-runtimeAsyncPagingDataDiffer.- تمت إضافة طريقتَي مساعدة جديدتَين
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 الآن التعليق التوضيحي
@MainThreadAndroidX Annotation للرمز البرمجي الشائع. (I78f0d، b/327682438)
الإصدار 3.3.0-alpha04
6 مارس 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha04. يتضمّن الإصدار 3.3.0-alpha04 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح أخطاء بسيطة في المستندات متعلقة بإضافة توافق Kotlin مع الأنظمة الأساسية المتعددة. (aosp/2950785)
الإصدار 3.3.0-alpha03
7 فبراير 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha03. يتضمّن الإصدار 3.3.0-alpha03 هذه التعديلات.
الميزات الجديدة
PagingDataPresenterهو الآن صف علني. يمكن الآن إنشاء أدوات العرض المتوافقة مع منصات متعددة استنادًا إلىPagingDataPresenterبدلاً من الحاجة إلى واجهات برمجة تطبيقات داخلية خاصة بالتقسيم إلى صفحات أوpaging-runtimeAsyncPagingDataDiffer. (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)
المساهمة الخارجية
- نشكر veyndan من Cash App على المساعدة في نقل مكتبة Paging إلى Kotlin Multiplatform (#560 و#561 و#562 و#573 و#576 و#577 و#578 و#579 و#580 و#581 و#583 و#584 و#586 و#609).
الإصدار 3.3.0-alpha01
20 سبتمبر 2023
- هذا هو الإصدار الأول من مكتبات androidx.paging المتوافقة مع عدة منصات. لا يحتوي هذا الإصدار إلا على
*-jvmو*-androidمن العناصر. بالنسبة إلى متغيرات macOS وiOS وLinux، استخدِم3.3.0-alpha02.
الإصدار 3.2
الإصدار 3.2.1
6 سبتمبر 2023
تم طرح androidx.paging:paging-*:3.2.1. يتضمّن الإصدار 3.2.1 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة تعليق واجهة برمجة التطبيقات
asSnapshot()الخاصة بعنصر Paging Testing عند تمرير Flow تم إنشاؤه باستخدامPagingData.from(List)لأنّasSnapshot()لن تتضمّن أي معلومات حول وقت انتهاء التحميل (على عكس التحميل الزائدPagingData.from(List, LoadStates)). لا يعمل هذا الحلّ إلا مع عمليات سير العمل التي يمكن إكمالها (مثلflowOf(PagingData.from(...))). أما عمليات سير العمل التي لا يمكن إكمالها (مثلMutableStateFlow، استخدِم حمولةPagingData.fromالزائدة التي توفّرLoadStates). (I502c3) - تستخدم مكتبة Paging Compose الآن
AndroidUiDispatcher.Mainداخليًا لضمان توفّر البيانات الجديدة في الإطار نفسه عند اكتمال التحميل. (Ia55af)
الإصدار 3.2.0
26 يوليو 2023
تم طرح androidx.paging:paging-*:3.2.0. يتضمّن الإصدار 3.2.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.1.0
- أصبحت واجهة برمجة التطبيقات Paging Compose مستقرة وتم دمجها مرة أخرى في بقية مكتبة Paging، وأصبح إصدارها الآن متوافقًا مع جميع عناصر Paging الأخرى. تشمل التغييرات منذ الإصدار 3.1.0 ما يلي:
- إتاحة معاينة قائمة بالبيانات الوهمية من خلال إنشاء
PagingData.from(fakeData)وتضمينPagingDataفيMutableStateFlow(مثلMutableStateFlow(PagingData.from(listOf(1, 2, 3)))). مرِّر هذا المسار إلى عناصر@Previewالقابلة للإنشاء على أنّها متلقّيcollectAsLazyPagingItems()للمعاينة. - إتاحة جميع التصاميم الكسولة، مثل
LazyVerticalGridوHorizontalPager، بالإضافة إلى المكوّنات الكسولة المخصّصة من مكتبتَي Wear وTV تم تحقيق ذلك من خلال طريقتَي الإضافة الجديدتَينLazyPagingItemsitemKeyوitemContentTypeعلى مستوى أدنى، ما يساعدك في تنفيذ المَعلمتَينkeyوcontentTypeفي واجهات برمجة التطبيقات العاديةitemsالمتوفّرة حاليًا فيLazyColumnوLazyVerticalGrid، بالإضافة إلى ما يعادلهما في واجهات برمجة التطبيقات، مثلHorizontalPager. - تم إيقاف
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)اللذين يتوافقان معLazyListScopeفقط.
- إتاحة معاينة قائمة بالبيانات الوهمية من خلال إنشاء
- عنصر
paging-testingجديد يوفّر واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من طبقات تطبيقك ودمجها مع مكتبة Paging بشكل منفصل. على سبيل المثال، يتضمّن- فئة
TestPagerالتي تتيح لك التحقّق من صحة سلوك عملية تنفيذPagingSourceالمخصّصة بشكل مستقل عن Pager وواجهة المستخدم الحقيقية. - واجهات برمجة التطبيقات
asPagingSourceFactoryلتحويلFlow<List<Value>>أوList<Value>ثابت إلىPagingSourceFactoryيمكن تمريره إلى أداة عرض الصفحات في الاختبارات asSnapshotإضافة Kotlin علىFlow<PagingData<Value>>، ما يؤدي إلى ترجمةFlow<PagingData<Value>>إلىList<Value>مباشرةً تتيح لك السمةasSnapshot lambdaمحاكاة واجهة المستخدم لتطبيقك من خلال واجهات برمجة التطبيقات، مثلscrollToأوappendScrollWhile، حتى تتمكّن من التحقّق من صحة لقطة البيانات في أي وقت ضمن مجموعة البيانات المقسّمة إلى صفحات.
- فئة
- تمت إضافة سجلّات تلقائية لعرض معلومات تصحيح أخطاء تقسيم الصفحات على مستويَين:
VERBOSEوDEBUG. يمكن تفعيل السجلات باستخدام الأمرadb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ينطبق ذلك على كلّ من "تقسيم المحتوى إلى صفحات باستخدام طرق العرض" أو "تقسيم المحتوى إلى صفحات باستخدام Compose". - تمت إضافة أدوات إنشاء للفئتَين
PagingDataAdapterوAsyncPagingDataDifferتقبلCoroutineContextبدلاً منCoroutineDispatcher. - تمت إضافة واجهة
PagingSourceFactoryوظيفية جديدة توفّر مساحة واجهة برمجة تطبيقات أكثر وضوحًا من تعبيرات lambda السابقة () ->PagingSource. يمكن استخدام هذا المصنع لإنشاء مثيل من Pager.
الإصدار 3.2.0-rc01
21 حزيران (يونيو) 2023
تم طرح androidx.paging:paging-*:3.2.0-rc01. يتضمّن الإصدار 3.2.0-rc01 هذه التعديلات.
المساهمة الخارجية
الإصدار 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 Compose1.0.0-alpha20للاطّلاع على مثال على واجهات برمجة التطبيقات البديلة. (I9626e)
الإصدار 3.2.0-alpha06
24 مايو 2023
تم طرح androidx.paging:paging-*:3.2.0-alpha06. يتضمّن الإصدار 3.2.0-alpha06 هذه التعديلات.
الميزات الجديدة
- تمت إضافة واجهة
PagingSourceFactoryوظيفية جديدة توفّر مساحة واضحة أكثر لواجهة برمجة التطبيقات مقارنةً بتعبيرات() -> PagingSourcelambda الحالية. يمكن استخدام هذا المصنع لإنشاء مثيل منPager. (I33165، b/280655188) - تمت إضافة واجهة برمجة تطبيقات جديدة
paging-testingList<Value>.asPagingSourceFactory()للحصول علىPagingSourceFactoryيتم تحميله فقط من قائمة بيانات غير قابلة للتغيير. يجب مواصلة استخدام الإضافة الحالية علىFlow<List<Value>>لإجراء الاختبارات باستخدام أجيال متعددة من البيانات الثابتة. (Id34d1، b/280655188)
تغييرات واجهة برمجة التطبيقات
- تم الآن إضافة التعليق التوضيحي
@VisibleForTestingإلى جميع واجهات برمجة التطبيقات العامة في paging-testing لضمان استخدام هذه الواجهات في الاختبارات فقط. (I7db6e) - لم يعُد
asSnapshotAPI يتطلّب إدخال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)
المساهمات الخارجية
- نشكر Veyndan على المساهمة في إبعاد مكتبة Paging عن تفاصيل Android/JVM. (#525 و#523 و#520 و#519 و#507 و#506 و#505 و#499 و#497 و#496 و#493)
الإصدار 3.2.0-alpha04
8 شباط (فبراير) 2023
تم طرح androidx.paging:paging-*:3.2.0-alpha04. يتضمّن الإصدار 3.2.0-alpha04 هذه التعديلات.
اختبار التقسيم إلى صفحات
- يحتوي العنصر
paging-testingالآن على طريقةasPagingSourceFactoryلإنشاءpagingSourceFactoryمنFlow<List<Value>>سيتم توفيرها إلى Pager. يمثّل كلList<Value>>صادر من Flow مجموعة من البيانات المقسّمة إلى صفحات. يسهّل ذلك إجراء اختبارات على تقسيم المحتوى إلى صفحات، مثل عمليات التحويلPagingData، من خلال محاكاة مصدر بيانات لكي يجمع منه Pager البيانات. (I6f230، b/235528239) تم توسيع عنصر
paging-testingليشمل واجهات برمجة تطبيقات جديدة مناسبة للتحقّق من صحة البيانات الواردة فيFlow<PagingData<T>>. يمكن استخدام ذلك، على سبيل المثال، لتأكيد ناتجFlow<PagingData<T>>من طبقة ViewModel.يتم ذلك من خلال إضافة
asSnapshotKotlin علىFlow<PagingData<Value>>، ما يؤدي إلى تحويلFlow<PagingData<Value>>إلىList<Value>مباشر. تتيح لك الدالة lambdaasSnapshotمحاكاة واجهة المستخدم لتطبيقك من خلال واجهات برمجة التطبيقات، مثلscrollToأوappendScrollWhile، بطريقة قابلة للتكرار ومتسقة حتى تتمكّن من التحقّق من صحة لقطة البيانات في أي وقت في مجموعة البيانات المقسّمة إلى صفحات.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshotهي طريقةsuspendيُتوقّع تنفيذها خلالrunTest. يمكنك الاطّلاع على اختبار إجراءات Kotlin الفرعية على Android للحصول على مزيد من المعلومات. (I55fd2 وI5bd26 وI7ce34 وI51f4d وI2249f وId6223 وIc4bab وIb29b9 وIc1238 وI96def وb/235528239)
تغييرات واجهة برمجة التطبيقات
- تم الآن وضع علامة بشكل صحيح على طلبات واجهة المستخدِم التي يتم إرسالها إلى
getItemوpeekفيAsyncPagingDataDifferوPagingDataAdapterللإشارة إلى أنّه يمكن استدعاؤها فقط في سلسلة التعليمات البرمجية الرئيسية. (I699b6) - تمت إزالة أحرف البدل من الأنواع العامة التي تستخدمها
TestPager، ما يسهّل استخدام نتائج هذه الطرق في الرمز المكتوب بلغة البرمجة Java. (I56c42)
الإصدار 3.2.0-alpha03
24 أكتوبر 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha03. يتضمّن الإصدار 3.2.0-alpha03 هذه التعديلات.
اختبار التقسيم إلى صفحات
يتضمّن هذا الإصدار عنصرًا جديدًا: paging-testing. يوفّر عنصر الإصدار هذا واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من طبقات تطبيقك ودمجها مع مكتبة Paging بشكل منفصل.
على سبيل المثال، يتضمّن هذا الإصدار الأوّلي الفئة TestPager التي تتيح لك التحقّق من صحة سلوك عملية التنفيذ المخصّصة PagingSource بشكل مستقل عن Pager وواجهة المستخدم الحقيقية التي تحتاج إليها عادةً لمحاكاة عملية الدمج الكاملة لميزة "التنقل حسب الصفحات".
يجب اعتبار TestPager عنصرًا زائفًا، أي عنصرًا بديلًا للاختبار يحاكي التنفيذ الفعلي لـ Pager مع توفير مساحة سطح مبسطة لواجهة برمجة التطبيقات لاختبار PagingSource. هذه الواجهات هي واجهات suspend ويجب تشغيلها ضمن runTest كما هو موضّح في دليل اختبار إجراءات Kotlin الفرعية على Android.
يمكن العثور على مثال على استخدام واجهات برمجة التطبيقات هذه في اختبارات room-paging التي تمت إعادة تصميمها لاستخدام TestPager.
تغييرات واجهة برمجة التطبيقات
- تتيح هذه السمة تكرارًا مناسبًا على
LoadResult.Page.dataمن خلالLoadResult.Page.iterator(). يسمح ذلك بشكل غير مباشر باستخدام طريقة مكتبة Kotlin العاديةflattenعند توفيرList<LoadResult.Page>، مثل الخاصيةpagesمنPagingStateالتي يتم تمريرها إلى الطريقةPagingSource.getRefreshKey. (Ie0718)
الإصدار 3.2.0-alpha02
10 أغسطس 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha02. يتضمّن الإصدار 3.2.0-alpha02 هذه التعديلات.
الميزات الجديدة
- توفّر الآن ميزة "التقسيم إلى صفحات" السجلات من خلال الفئتين
AsyncPagingDataDifferأوPagingDataAdapterلعرض معلومات تصحيح الأخطاء التي تم جمعها منPagingData. - يمكن تفعيل السجلّات باستخدام الأمر
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)
إصلاح الأخطاء
- تم إصلاح خطأ الدالة الإنشائية
PagingDataDifferغير المتوفّرة عند استخدامpaging-common:3.2.0-alpha01مع وقت التشغيلpaging-runtime:3.1.1أو إصدار أقدم.(b/235256201)
الإصدار 3.2.0-alpha01
1 يونيو 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha01. يتضمّن الإصدار 3.2.0-alpha01 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة أدوات إنشاء للفئتَين
PagingDataAdapterوAsyncPagingDataDifferتقبلCoroutineContextبدلاً منCoroutineDispatcher. (Idc878) - بشكلٍ تلقائي، لن تؤثر
PagingData.from()وPagingData.empty()فيCombinedLoadStatesمن جهة مقدّم العرض. تمت إضافة تحميل زائد جديد يسمح بتمريرsourceLoadStatesوremoteLoadStatesإلى أدوات الإنشاء هذه للحفاظ على السلوك الحالي لضبطLoadStatesعلى أن يكون نهائيًا بالكامل (أيNotLoading(endOfPaginationReached = false))، مع إمكانية تضمين الولايات البعيدة أيضًا إذا لزم الأمر. في حال عدم اجتيازLoadStates، سيتم الاحتفاظ بقيمةCombinedLoadStatesالسابقة على جهاز مقدّم العرض عند تلقّيPagingDataالثابت. (Ic3ce5، b/205344028)
إصلاح الأخطاء
- يتم الآن تحديد أولوية نتيجة
PagingSource.getRefreshKey()بشكل صحيح علىinitialKeyفي الحالات التي تعرض فيها قيمة فارغة، ولكن تم ضبط قيمة غير فارغة لـinitialKey. (Ic9542، b/230391606)
المساهمة الخارجية
- تم تعديل واجهة برمجة التطبيقات :compose:ui:ui-test (updateApi) بسبب نقل بيانات test-coroutines-lib (I3366d)
الإصدار 3.1
الإصدار 3.1.1
9 مارس 2022
تم طرح androidx.paging:paging-*:3.1.1. يتضمّن الإصدار 3.1.1 هذه التعديلات.
إصلاح الأخطاء
- تمت إزالة أحداث
LoadState.NotLoadingالوسيطة بين الأجيال التي أضافها.cachedIn()بشكل غير صحيح. يسهّل هذا التغيير التفاعل مع تغييراتLoadStateمن خلال إزالة أحداثLoadState.NotLoadingالمكرّرة التي تم إنتاجها بين إعادة محاولة عمليات التحميل الفاشلة، وعند إعادة التحميل أو أثناء الإبطال.
الإصدار 3.1.0
17 نوفمبر 2021
تم طرح androidx.paging:paging-*:3.1.0. يتضمّن الإصدار 3.1.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.0.0
- لم تعُد واجهتا برمجة التطبيقات
Flow<PagingData>.observableوFlow<PagingData>.flowableتجريبيتين - تغييرات السلوك في
LoadState:- أصبح
endOfPaginationReachedالآنfalseدائمًا مقابلLoadType.REFRESHلكل منPagingSourceوRemoteMediator - تنتظر السمة
LoadStatesمن Paging الآن قيمًا صالحة من كلّ منPagingSourceوRemoteMediatorقبل إرسالها إلى أسفل السلسلة. ستبدأ الأجيال الجديدة منPagingDataدائمًا بشكل صحيح بـLoadingلحالة إعادة التحميل بدلاً من إعادة الضبط إلىNotLoadingبشكل غير صحيح في بعض الحالات. - لم يعُد "
.loadStateFlow" و".addLoadStateListener" في واجهات برمجة التطبيقات الخاصة بالمقدِّم يرسلان بشكل متكرّرCombinedLoadStatesأوليًا يتم فيه دائمًا ضبط حالات الوسيط علىnull
- أصبح
- يتم الآن إلغاء عمليات الإنشاء السابقة على الفور عند إبطالها أو إنشاء عمليات جديدة. لم يعُد من الضروري استخدام
.collectLatestعلىFlow<PagingData>، ولكن لا يزال يُنصح بذلك. - تمت إضافة
PagingSource.LoadResult.Invalidكنوع إرجاع جديد منPagingSource.load، ما يؤدي إلى تجاهل مكتبة Paging لأي طلبات تحميل معلّقة أو مستقبلية إلىPagingSourceوإبطالها. تم تصميم نوع الإرجاع هذا للتعامل مع البيانات التي قد تكون غير صالحة أو قديمة والتي يمكن إرجاعها من قاعدة البيانات أو الشبكة. - تمت إضافة واجهتَي برمجة التطبيقات
.onPagesPresentedو.addOnPagesUpdatedListenerالخاصتَين بالمقدِّمين، واللتين يتم تشغيلهما بشكل متزامن أثناء عرض الصفحات في واجهة المستخدم. يمكن أن تحدث تعديلات على الصفحة في الحالات التالية:- يكتمل التحميل الأوّلي لجيل جديد من PagingData، بغض النظر عمّا إذا كان الجيل الجديد يتضمّن أي تغييرات على العناصر المعروضة. أي: سيؤدي الجيل الجديد الذي يكمل عملية التحميل الأولي بدون أي تحديثات لأنّ القائمة هي نفسها تمامًا إلى تشغيل وظيفة معاودة الاتصال هذه.
- يتم إدراج صفحة، حتى إذا كانت الصفحة المُدرَجة لا تحتوي على أي عناصر جديدة.
- تمت إزالة الصفحة، حتى لو كانت فارغة.
الإصدار 3.1.0-rc01
3 نوفمبر 2021
تم طرح androidx.paging:paging-*:3.1.0-rc01. يتضمّن الإصدار 3.1.0-rc01 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة حالة السباق وتسريب الذاكرة في .cachedIn() في الحالات التي أرسلت فيها أحداث تحميل متعدّدة من Paging إلى أسفل السلسلة بدون مراقبين أو بين وقت انتقال المراقب إلى PagingData جديد. (Ib682e)
الإصدار 3.1.0-beta01
13 أكتوبر 2021
تم طرح androidx.paging:paging-*:3.1.0-beta01. يتضمّن الإصدار 3.1.0-beta01 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى تجاهل العديد من عمليات الوصول السريع إلى العناصر عند أخذها في الاعتبار في prefetchDistance، ما يؤدي إلى توقّف عمليات تحميل الصفحات. تُعدّ هذه المشكلة أكثر حدةً عندما يتم عرض العديد من العناصر في وقت واحد بترتيب يعطي الأولوية للتحميل حسب اتجاه التمرير الذي يختاره المستخدم. يتم الآن تخزين عمليات الوصول إلى هذه العناصر مؤقتًا وتحديد أولويتها بشكل متزامن لمنع إسقاطها. (aosp/1833273)
الإصدار 3.1.0-alpha04
29 سبتمبر 2021
تم طرح androidx.paging:paging-*:3.1.0-alpha04. يتضمّن الإصدار 3.1.0-alpha04 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- لم تعُد واجهتا برمجة التطبيقات
Flow<PagingData>.observableوFlow<PagingData>.flowableتجريبيتين. (Ie0bdd)
إصلاح الأخطاء
- بالنسبة إلى LoadStates، تكون قيمة
endOfPaginationReachedالآنfalseدائمًا بالنسبة إلىLoadType.REFRESH. في السابق، كان من الممكن أن تكون قيمة endOfPaginationReached هيtrueبالنسبة إلى RemoteMediatorREFRESH، ولكن ليس بالنسبة إلى 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)لم يعُد يتم إرسال
CombinedLoadStatesأولي بشكل متكرّر في واجهات برمجة التطبيقات الخاصة بأدوات العرض، إذ إنّCombinedLoadStatesيتضمّن دائمًا حالات الوسيط التي تم ضبطها علىnullوحالات المصدر التي تم ضبطها علىNotLoading(endOfPaginationReached = false)..loadStateFlow.addLoadStateListenerويعني هذا أنّ:- سيتم دائمًا ملء حالات الوسيط إذا كنت تستخدم RemoteMediator.
- لن يؤدي تسجيل أداة معالجة loadState جديدة أو أداة تجميع جديدة في
.loadStateFlowإلى إصدار القيمة الحالية فورًا إذا لم تتلقَّCombinedLoadStatesحقيقيًا منPagingData. يمكن أن يحدث ذلك إذا بدأ جامع البيانات أو أداة معالجة الحدث قبل إرسالPagingData. (I1a748)
الإصدار 3.1.0-alpha03
21 تموز (يوليو) 2021
تم طرح androidx.paging:paging-*:3.1.0-alpha03. يتضمّن الإصدار 3.1.0-alpha03 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
تمت إضافة نوع الإرجاع الثالث LoadResult.Invalid إلى PagingSource. عندما تعرض الدالة PagingSource.load النتيجة LoadResult.Invalid، ستتجاهل عملية التقسيم إلى صفحات البيانات التي تم تحميلها وستبطل PagingSource. تم تصميم نوع الإرجاع هذا للتعامل مع البيانات التي قد تكون غير صالحة أو قديمة والتي يمكن إرجاعها من قاعدة البيانات أو الشبكة.
على سبيل المثال، إذا تمت الكتابة في قاعدة البيانات الأساسية ولكن لم يتم إبطال PagingSource في الوقت المناسب، قد تعرض نتائج غير متسقة إذا كان تنفيذها يعتمد على عدم قابلية مجموعة البيانات الأساسية التي يتم تحميلها منها للتغيير (مثل LIMIT OFFSET style db implementations). في هذه الحالة، يُنصح بالتحقّق من الإبطال بعد التحميل وعرض LoadResult.Invalid، ما يؤدي إلى تجاهل مكتبة Paging لأي طلبات تحميل معلّقة أو مستقبلية إلى PagingSource وإبطالها.
يتوافق نوع الإرجاع هذا أيضًا مع واجهة برمجة التطبيقات Paging2 التي تستخدم LivePagedList أو RxPagedList. عند استخدام PagingSource مع واجهات برمجة التطبيقات PagedList في Paging2، يتم فصل PagedList على الفور، ما يؤدي إلى إيقاف المحاولات الإضافية لتحميل البيانات في PagedList هذه وتفعيل الإبطال في PagingSource.
LoadResult هي فئة محكمة الإغلاق، ما يعني أنّ هذا التغيير غير متوافق مع المصدر، وبالتالي فإنّ حالات الاستخدام التي تستخدم نتائج PagingSource.load مباشرةً ستضطر إلى التعامل مع LoadResult.Invalid في وقت الترجمة البرمجية. على سبيل المثال، على مستخدمي Kotlin الذين يستفيدون من exhaustive-when للتحقّق من نوع الإرجاع إضافة عملية تحقّق من النوع Invalid. (Id6bd3، b/191806126، b/192013267)
إصلاح الأخطاء
- يتم الآن تشغيل عمليات معاودة الاتصال الخاصة بإبطال البيانات التي تمت إضافتها من خلال PagingSource.registerInvalidatedCallback أو DataSource.addInvalidatedCallback تلقائيًا إذا تم تسجيلها في PagingSource أو DataSource تم إبطالهما من قبل. يحلّ هذا الإجراء مشكلة تداخل تؤدي إلى تجاهل إشارات الإبطال في ميزة "التقسيم إلى صفحات" وتعطّلها عند توفير مصدر غير صالح أثناء التحميل الأوّلي. بالإضافة إلى ذلك، تتم الآن إزالة عمليات معاودة الاتصال غير الصالحة بشكل صحيح بعد تشغيلها، لأنّه من المضمون أن يتم استدعاؤها مرة واحدة على الأكثر. (I27e69)
- إرسال القيمة الأولية للعنصر النائب (InitialPagedList) من بث PagedList تم إنشاؤه حديثًا، مثل: لن تعمل الفئتان LivePagedListBuilder أو RxPagedListBuilder على محو البيانات التي تم تحميلها سابقًا.
الإصدار 3.1.0-alpha02
1 تموز (يوليو) 2021
تم طرح androidx.paging:paging-*:3.1.0-alpha02. يتضمّن الإصدار 3.1.0-alpha02 هذه التعديلات.
الميزات الجديدة
تمت إضافة أدوات معالجة onPagesPresented وواجهات برمجة تطبيقات عارض التدفق التي يتم تشغيلها فور تعديل الصفحات المعروضة في واجهة المستخدم.
بما أنّ هذه التحديثات متزامنة مع واجهة المستخدم، يمكنك استدعاء طرق المحوّل، مثل .snapshot و.getItemCount، لفحص الحالة بعد تطبيق التحديث. يُرجى العِلم أنّه تم ترك استدعاء .snapshot() بشكل صريح لأنّ ذلك قد يكون مكلفًا عند إجراء كل تعديل.
يمكن أن تحدث تعديلات الصفحة في السيناريوهات التالية:
- اكتمال التحميل الأوّلي لجيل جديد من PagingData، بغض النظر عمّا إذا كان الجيل الجديد يتضمّن أي تغييرات على العناصر المعروضة، أي سيؤدي جيل جديد يكمل عملية التحميل الأوّلي بدون أي تحديثات لأنّ القائمة هي نفسها تمامًا إلى تفعيل معاودة الاتصال هذه.
- يتم إدراج صفحة، حتى إذا كانت الصفحة المُدرَجة لا تحتوي على أي عناصر جديدة
- يتم تجاهل الصفحة، حتى إذا كانت فارغة (I272c9، b/189999634)
إصلاح الأخطاء
- لن يؤدي الوصول إلى PagedList.dataSource من القيمة الأولية التي تنتجها LivePagedList أو RxPagedList إلى حدوث IllegalStateException بشكل غير صحيح (I96707).
الإصدار 3.1.0-alpha01
2 حزيران (يونيو) 2021
تم طرح androidx.paging:paging-*:3.1.0-alpha01. يتضمّن الإصدار 3.1.0-alpha01 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تتوفّر الفئات التي يوفّرها
paging-rxjava3الآن ضمن حزمةandroidx.paging.rxjava3كي لا تتعارض معpaging-rxjava2(Ifa7f6).
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في إرسال Paging لأحداث no-op differ إلى RecyclerView، ما قد يؤدي إلى تنشيط بعض أدوات معالجة الأحداث مبكرًا. (Ic507f، b/182510751)
المساهمة الخارجية
- تمت إضافة واجهات برمجة تطبيقات PagedList المتوافقة التي تم إيقافها نهائيًا إلى عنصر rxjava3 (Id1ce2، b/182497591)
الإصدار 1.0.0 من مكتبة Paging Compose
الإصدار 1.0.0-alpha20
24 مايو 2023
تم طرح androidx.paging:paging-compose:1.0.0-alpha20. يتضمّن الإصدار 1.0.0-alpha20 هذه التعديلات.
الميزات الجديدة
- تتيح مكتبة Paging Compose الآن معاينة قائمة من البيانات الوهمية من خلال إنشاء
PagingData.from(fakeData)وتضمينPagingDataفيMutableStateFlow(مثلاًMutableStateFlow(PagingData.from(listOf(1, 2, 3)))). من خلال استخدام هذه البيانات كمدخل في@Preview، ستوفّر طلباتcollectAsLazyPagingItems()LazyPagingItemsيمكن معاينتها. (I8a78d، b/194544557)
إصلاح الأخطاء
- ستتوفّر الآن على الفور البيانات المخزّنة مؤقتًا من
pager.flow.cachedInالتي تم جمعها فيLazyPagingItemsبعد استعادة الحالة بدون الحاجة إلى جمع البيانات بشكل غير متزامن. وهذا يعني أنّ البيانات المخزّنة مؤقتًا ستكون جاهزة للعرض فورًا عند الإنشاء الأوّلي بعد استعادة الحالة. (I97a60، b/177245496)
الإصدار 1.0.0-alpha19
3 مايو 2023
تم طرح androidx.paging:paging-compose:1.0.0-alpha19. يتضمّن الإصدار 1.0.0-alpha19 هذه التعديلات.
إتاحة جميع التنسيقات الكسولة
في السابق، كانت مكتبة Paging Compose توفّر الإضافتين المخصّصتين items وitemsIndexed على LazyListScope، ما يعني أنّه لا يمكنك استخدام Paging Compose مع تنسيقات العرض الكسول الأخرى، مثل LazyVerticalGrid أو HorizontalPager أو غيرها من المكوّنات المخصّصة للعرض الكسول التي توفّرها مكتبتا Wear وTV. ويشكّل حلّ هذه المشكلة التحديث الأساسي في هذا الإصدار.
لإتاحة المزيد من التصاميم الكسولة، كان علينا إنشاء واجهات برمجة تطبيقات في طبقة مختلفة. فبدلاً من توفير واجهة برمجة تطبيقات items مخصّصة لكل تصميم كسول، توفّر مكتبة Paging Compose الآن طرقًا موسّعة على مستوى أقل قليلاً في LazyPagingItems وitemKey وitemContentType. تركّز واجهات برمجة التطبيقات هذه على مساعدتك في تنفيذ المَعلمتَين key وcontentType في واجهات برمجة التطبيقات العادية items المتوفّرة حاليًا لكلّ من LazyColumn وLazyVerticalGrid، بالإضافة إلى ما يعادلهما في واجهات برمجة التطبيقات الأخرى، مثل HorizontalPager. (Ifa13b، Ib04f0، b/259385813)
هذا يعني أنّ دعم LazyVerticalGrid سيكون على النحو التالي:
// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()
LazyVerticalGrid(columns = GridCells.Fixed(2)) {
// Here we use the standard items API
items(
count = lazyPagingItems.itemCount,
// Here we use the new itemKey extension on LazyPagingItems to
// handle placeholders automatically, ensuring you only need to provide
// keys for real items
key = lazyPagingItems.itemKey { it.uniqueId },
// Similarly, itemContentType lets you set a custom content type for each item
contentType = lazyPagingItems.itemContentType { "contentType" }
) { index ->
// As the standard items call provides only the index, we get the item
// directly from our lazyPagingItems
val item = lazyPagingItems[index]
PagingItem(item = item)
}
}
للاطّلاع على المزيد من الأمثلة حول استخدام واجهات برمجة التطبيقات الجديدة هذه، يُرجى الرجوع إلى عيناتنا.
على الرغم من أنّ هذه التغييرات تجعل المثالين LazyColumn وLazyRow أطول ببضعة أسطر، رأينا أنّ الاتساق في جميع التصاميم الكسولة كان عاملاً مهمًا بالنسبة إلى المستخدمين الذين سيستخدمون Paging Compose من الآن فصاعدًا. لهذا السبب، تم إيقاف الإضافات الحالية إلى LazyListScope نهائيًا. (I0c459 وI92c8f وb/276989796)
تغييرات واجهة برمجة التطبيقات
- لتسهيل عملية نقل البيانات إلى واجهات برمجة التطبيقات الجديدة، تتوافق وظائف الإضافة
itemsوitemsIndexedفيLazyListScopeالآن مع المَعلمةcontentType، ما يتيح إمكانية التوافق مع واجهات برمجة التطبيقات الجديدة. (Ib1918، b/255283378)
تحديثات الاعتماديات
- عدّلنا إصدار التبعية في مكتبة Paging Compose من الإصدار 1.0.5 إلى الإصدار 1.2.1. (Ib1918، b/255283378)
الإصدار 1.0.0-alpha18
8 شباط (فبراير) 2023
تم إصدار androidx.paging:paging-compose:1.0.0-alpha18 بدون أي تغييرات. يتضمّن الإصدار 1.0.0-alpha18 هذه التعديلات.
الإصدار 1.0.0-alpha17
24 أكتوبر 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha17. يتضمّن الإصدار 1.0.0-alpha17 هذه التعديلات.
الميزات الجديدة
- إتاحة استخدام
CoroutineContextمخصّص عند الاتصال بـcollectLazyPagingItems(I7a574، b/243182795، b/233783862)
الإصدار 1.0.0-alpha16
10 أغسطس 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha16. يتضمّن الإصدار 1.0.0-alpha16 هذه التعديلات.
الميزات الجديدة
- توفّر ميزة "التقسيم إلى صفحات" الآن سجلات من خلال الفئة
LazyPagingItemsلعرض معلومات تصحيح الأخطاء التي تم جمعها من PagingData. - يمكن تفعيل السجلات باستخدام الأمر
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
إصلاح الأخطاء
- تم إصلاح خطأ عدم توفّر الدالة الإنشائية
PagingDataDifferعند استخدامpaging-compose:1.0.0-alpha15معpaging-common:3.1.1أو إصدار أقدم.(b/235256201،b/239868768)
الإصدار 1.0.0-alpha15
1 يونيو 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha15. يتضمّن الإصدار 1.0.0-alpha15 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة أدوات إنشاء للفئتَين
PagingDataAdapterوAsyncPagingDataDifferتقبلCoroutineContextبدلاً منCoroutineDispatcher. (Idc878)
إصلاح الأخطاء
- يضبط
LazyPagingItemsالآن قيمةloadStateالأولية علىLoadState.Loading. (I55043، b/224855902)
الإصدار 1.0.0-alpha14
13 أكتوبر 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha14. يتضمّن الإصدار 1.0.0-alpha14 هذه التعديلات.
الإصدار 1.0.0-alpha13
29 سبتمبر 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha13. يتضمّن الإصدار 1.0.0-alpha13 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تم استبدال الدالة
LazyPagingItems.snapshot()بالسمةLazyPagingItems.itemSnapshotList(Ie2da8) - تمت إزالة السمة المتوقّفة نهائيًا
LazyPagingItems.getAsState()(Ie65e4)
الإصدار 1.0.0-alpha12
21 تموز (يوليو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha12. يتضمّن الإصدار 1.0.0-alpha12 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تقبل الدالتان
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)المستخدَمتان لربط "التنقل بين الصفحات" بالدالةLazyColumn/Rowالآن مَعلمة مفتاح الخيار التي تتيح لك تحديد مفتاح ثابت يمثّل العنصر. يمكنك الاطّلاع على مزيد من المعلومات حول المفاتيح هنا. (I7986d) - تم إيقاف الدالة
lazyPagingItems.getAsState(index)نهائيًا. يمكنك استخدامlazyPagingItems[index]كبديل. (I086cb، b/187339372)
الإصدار 1.0.0-alpha11
30 حزيران (يونيو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha11. يتضمّن الإصدار 1.0.0-alpha11 هذه التعديلات.
الإصدار 1.0.0-alpha10
2 حزيران (يونيو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha10. يتضمّن الإصدار 1.0.0-alpha10 هذه التعديلات.
الإصدار 1.0.0-alpha09
18 أيار (مايو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha09. يتضمّن الإصدار 1.0.0-alpha09 هذه التعديلات.
إصلاح الأخطاء
- أصبح بإمكانك الآن مراقبة itemCount وitem getter في LazyPagingItems، ما يتيح استخدامهما مع LazyVerticalGrid أيضًا (Ie2446 وb/171872064 وb/168285687).
توافق Compose
- لا يتوافق
androidx.paging:paging-compose:1.0.0-alpha09إلا مع الإصدار1.0.0-beta07من Compose والإصدارات الأحدث.
الإصدار 1.0.0-alpha08
24 شباط (فبراير) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha08. يتضمّن الإصدار 1.0.0-alpha08 هذه التعديلات.
تم تعديلها لتتكامل مع الإصدار 1.0.0-beta01 من Compose.
الإصدار 1.0.0-alpha07
10 شباط (فبراير) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha07. يتضمّن الإصدار 1.0.0-alpha07 هذه التعديلات.
تم تعديلها لتتكامل مع الإصدار 12 من قناة Compose ألفا.
الإصدار 1.0.0-alpha06
28 يناير 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha06. يتضمّن الإصدار 1.0.0-alpha06 هذه التعديلات.
إصلاح الأخطاء
تم تعديلها لتعتمد على الإصدار 1.0.0-alpha11 من Compose.
الإصدار 1.0.0-alpha05
13 كانون الثاني (يناير) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha05. يتضمّن الإصدار 1.0.0-alpha05 هذه التعديلات.
تم تعديلها لتعتمد على الإصدار 1.0.0-alpha10 من Compose.
الإصدار 1.0.0-alpha04
16 كانون الأول (ديسمبر) 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha04. يتضمّن الإصدار 1.0.0-alpha04 هذه التعديلات.
إصلاح الأخطاء
- تم تعديل خصائص الراحة،
CombinedLoadStates.refreshوCombinedLoadStates.prependوCombinedLoadStates.append، للانتقال فقط منLoadingإلىNotLoadingبعد أن تصبح حالة التحميل لكلّ من الوسيط والمصدرNotLoading، وذلك لضمان تطبيق التعديل عن بُعد. (I65619)
الإصدار 1.0.0-alpha03
2 ديسمبر 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha03. يتضمّن الإصدار 1.0.0-alpha03 هذه التعديلات.
- تم تعديلها لتتوافق مع الإصدار 1.0.0-alpha08 من Compose.
الإصدار 1.0.0-alpha02
11 نوفمبر 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha02. يتضمّن الإصدار 1.0.0-alpha02 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة الطرق
.peek()و.snapshot()و.retry()و.refresh()إلىLazyPagingItems التي تعرض الوظيفة نفسها المتوفرة فيAsyncPagingDataDiffer/PagingDataAdapter(Iddfe8، b/172041660)
الإصدار 1.0.0-alpha01
28 أكتوبر 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha01. يتضمّن الإصدار 1.0.0-alpha01 هذه التعديلات.
الميزات الجديدة
توفّر حزمة paging-compose إمكانية الدمج بين مكتبة Paging وJetpack Compose. مثال بسيط على الاستخدام:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
الإصدار 3.0.1
الإصدار 3.0.1
21 تموز (يوليو) 2021
تم طرح androidx.paging:paging-*:3.0.1. يتضمّن الإصدار 3.0.1 هذه التعديلات.
إصلاح الأخطاء
- لن يؤدي الوصول إلى
PagedList.dataSourceمن القيمة الأولية التي تنتجهاLivePagedListأوRxPagedListإلى حدوث خطأ IllegalStateException (I96707) بشكل غير صحيح.
الإصدار 3.0.0
الإصدار 3.0.0
5 أيار (مايو) 2021
تم طرح androidx.paging:paging-*:3.0.0. يتضمّن الإصدار 3.0.0 هذه التعديلات.
الميزات الرئيسية في الإصدار 3.0.0
تم إيقاف معظم واجهة برمجة التطبيقات الحالية من الإصدار 2.x.x من Paging نهائيًا لصالح واجهات برمجة التطبيقات الجديدة في الإصدار 3 من Paging، وذلك بهدف إجراء التحسينات التالية:
- توافق تام مع إجراءات Kotlin الفرعية وFlow
- الدعم في ما يتعلق بالإلغاء
- إشارات مدمجة لحالة التحميل والأخطاء
- وظيفة إعادة المحاولة وإعادة التحميل
- تم دمج جميع الفئات الفرعية الثلاث من DataSource في فئة PagingSource موحَّدة
- عمليات تحويل الصفحات المخصّصة، بما في ذلك عملية مدمجة لإضافة فواصل
- جارٍ تحميل رؤوس وتذييلات الحالة
الإصدار 3.0.0-rc01
21 أبريل 2021
تم طرح androidx.paging:paging-*:3.0.0-rc01. يتضمّن الإصدار 3.0.0-rc01 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في إرسال Paging لأحداث no-op differ إلى RecyclerView، ما قد يؤدي إلى تنشيط بعض أدوات معالجة الأحداث مبكرًا. (Ic507f، b/182510751)
الإصدار 3.0.0-beta03
24 مارس 2021
تم طرح androidx.paging:paging-*:3.0.0-beta03. يتضمّن الإصدار 3.0.0-beta03 هذه التعديلات.
إصلاح الأخطاء
- أعدنا تصميم طريقة التعامل مع العناصر النائبة عند إعادة تحميل القائمة لمنع حدوث قفزات غير متوقّعة في RecyclerView. يُرجى الاطّلاع على NullPaddedDiffing.md للحصول على التفاصيل. (If1490، b/170027529، b/177338149)
- لم تعُد أدوات إنشاء PagedList المختلفة (مسار التوافق القديم) تستدعي
DataSource.Factory.create()بشكل غير صحيح بشكل متزامن في سلسلة التعليمات الرئيسية عند استدعاء.build(). (b/182798948)
الإصدار 3.0.0-beta02
10 مارس 2021
تم طرح androidx.paging:paging-*:3.0.0-beta02. يتضمّن الإصدار 3.0.0-beta02 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تعمل إضافات Rx3 الآن على نشر
@ExperimentalCoroutinesApiشرط الموافقة بشكل صحيح. في السابق، كان يتم وضع علامة على الدالة@get، ولكن يتجاهلها برنامج الترجمة البرمجية في Kotlin بسبب: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
إصلاح الأخطاء
- فرض قيود على الاستخدام العام لواجهات برمجة التطبيقات التجريبية (I6aa29 وb/174531520)
- تم إصلاح الخلل الذي كان يتسبب في أن تكون قيمة
PagingStateهيnullدائمًا عند طلب إعادة التحميل عن بُعد. - تم إصلاح خطأ كان يؤدي إلى منع مكتبة Paging من استرجاع البيانات مرة أخرى لتلبية الطلب
prefetchDistance، ما يؤدي إلى "تعطُّل" مكتبة Paging، وذلك عندما تعرض الصفحات الفارغة التي تعرضها PagingSource خطأ.
الإصدار 3.0.0-beta01
10 شباط (فبراير) 2021
تم طرح androidx.paging:paging-*:3.0.0-beta01. يتضمّن الإصدار 3.0.0-beta01 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تعرض الآن أغلفة Rx2 وRx3 التعليق التوضيحي التجريبي الذي تعتمد عليه. إذا كنت تستخدم أغلفة Rx المتوافقة في paging-rxjava2 أو paging-rxjava3، عليك الآن إضافة التعليق التوضيحي
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d) إلى الاستخدامات.
إصلاح الأخطاء
- تم إصلاح الخطأ
IndexOutOfBoundsException: Inconsistency detectedالذي كان يظهر أحيانًا عند استخدام الإصدار 2 من واجهات برمجة التطبيقاتDataSourceمن خلال مسارات التوافق - تم الآن إطلاق طلب
isInvalidأثناء عملية تهيئةDataSourceعند استخدامه من خلال مسارات التوافق بشكل صحيح على fetchDispatcher بدلاً من إطلاقه على سلسلة التعليمات الرئيسية. يحلّ هذا الإصدارIllegalStateExceptionبسبب الوصول إلى قاعدة البيانات في سلسلة التعليمات الرئيسية عند استخدام تنفيذPagingSourceفي Room.
الإصدار 3.0.0-alpha13
27 يناير 2021
تم طرح androidx.paging:paging-*:3.0.0-alpha13. يتضمّن الإصدار 3.0.0-alpha13 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- لم يعُد تنفيذ
PagingSource.getRefreshKeyاختياريًا، بل أصبح دالة مجرّدة بدون تنفيذ تلقائي. يمكن للمستخدمين الذين ينقلون البيانات إما مواصلة عرض التنفيذ التلقائي الذي يعرضnullفقط، ولكن يجب أن يتضمّنgetRefreshKey()تنفيذًا حقيقيًا يعرض مفتاحًا استنادًا إلى موضع التمرير الحالي للمستخدم الذي يسمح لمكتبة Paging بمواصلة التحميل في منتصف إطار العرض باستخدامPagingState.anchorPositionإذا أمكن ذلك. (I4339a) InvalidatingPagingSourceFactoryهو الآن صف نهائي (Ia3b0a)- السماح بضبط سلوك فاصل المحطة الطرفية (الرأس / التذييل) باستخدام مَعلمة SeparatorType اختيارية إضافية والخياران هما:
-
FULLY_COMPLETE- السلوك الحالي: انتظِر إلى أن يحدّد كل من PagingSource وRemoteMediator أنّه تم بلوغ نهاية التصفّح قبل إضافة فواصل نهائية. في حال عدم استخدام RemoteMediator، سيتم تجاهل remote loadState. يكون ذلك مفيدًا بشكل أساسي إذا كنت تريد عرض فواصل الأقسام فقط عند تحميل القسم بالكامل، بما في ذلك استرجاع البيانات من مصدر بعيد، مثل الشبكة. -
SOURCE_COMPLETE- الانتظار فقط إلى أن تحدّد PagingSource endOfPaginationReached حتى إذا تم استخدام RemoteMediator يتيح ذلك عرض الرؤوس والتذييلات بشكل متزامن مع عملية التحميل الأولية، ما يمنع المستخدمين من الحاجة إلى التمرير للاطّلاع على الفواصل النهائية. (Ibe993، b/174700218)
-
إصلاح الأخطاء
- تم إصلاح مشكلة نادرة لتسرُّب الذاكرة تحدث عند إبطال صحة PagingSource قبل أن يتمكّن PageFetcher من بدء التحميل منها. (I9606b، b/174625633)
الإصدار 3.0.0-alpha12
13 كانون الثاني (يناير) 2021
تم طرح androidx.paging:paging-*:3.0.0-alpha12. يتضمّن الإصدار 3.0.0-alpha12 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- لم تعُد InvalidatingPagingSourceFactory فئة مجرّدة لأنّها لم تتضمّن أي طرق مجرّدة. (I4a8c4)
- تمّت إضافة تحميل زائد للدالة .cachedIn() يقبل ViewModel بدلاً من Lifecycle أو CoroutineScope لمستخدمي Java. (I97d81، b/175332619)
- السماح لبرامج Java باستدعاء عمليات تحويل PagingData بطريقة غير متزامنة، وذلك من خلال قبول Executor في وسيطات عامل التشغيل transform. تمت إزالة اللاحقة -Sync من جميع عوامل تشغيل التحويل -Sync، وسيحتاج مستخدمو Kotlin Coroutine إلى إزالة الغموض من خلال استدعاء دالة الإضافة التي تقبل كتلة تعليق بدلاً من ذلك.
تم نقل جميع عوامل تشغيل تحويل PagingData إلى الإضافات
ضمن فئة PagingDataTransforms الثابتة. على مستخدمي Java استدعاء هذه الدوال المساعدة الثابتة، مثل:
PagingDataTransforms.map(pagingData, transform)بالنسبة إلى مستخدمي Kotlin، يكون بناء الجملة هو نفسه، ولكن عليك استيراد الدالة. (If6885، b/172895919)
إصلاح الأخطاء
- تم إصلاح الخطأ الذي كان يتسبّب في عدم استدعاء
RemoteMediator.load()أثناءadapter.refresh()إذا تم الوصول إلى نهاية التقسيم على صفحات.
الإصدار 3.0.0-alpha11
16 كانون الأول (ديسمبر) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha11. يتضمّن الإصدار 3.0.0-alpha11 هذه التعديلات.
الميزات الجديدة
- تمت إضافة ميزة حفظ الحالة للحالات الأساسية التالية (لا يزال العمل جارياً على توفير الدعم الكامل، خاصةً في حالة المصدر ذي الطبقات):
- يتم تخزين التدفق مؤقتًا ولا يتم إيقاف التطبيق (على سبيل المثال، يتم تخزين التدفق مؤقتًا في نموذج عرض ويتم إعادة إنشاء النشاط في العملية)
- يتم احتساب مصدر التقسيم إلى صفحات، ويتم تفعيل العناصر النائبة، ولا يكون التنسيق متداخلاً.
تغييرات واجهة برمجة التطبيقات
- أصبحت السمة
PagingSource.getRefreshKey()الآن واجهة برمجة تطبيقات ثابتة (I22f6f، b/173530980) - لم يعُد
PagingSource.invalidateدالة مفتوحة. إذا كنت بحاجة إلى تلقّي إشعار عند حدوث الإبطال، ننصحك باستخدام طريقة registerInvalidatedCallback بدلاً من إلغاء طريقة invalidate. (I628d9، b/173029013، b/137971356) - يتضمّن Pager الآن أداة إنشاء تجريبية واحدة إلى جانب أدوات الإنشاء العادية، بدلاً من تسريب واجهات برمجة التطبيقات التجريبية إلى واجهة برمجة التطبيقات العامة غير التجريبية من خلال التعليق التوضيحي الذي يتطلّب الموافقة. (I9dc61، b/174531520)
- تم تعديل خصائص الراحة،
CombinedLoadStates.refreshوCombinedLoadStates.prependوCombinedLoadStates.append، للانتقال فقط منLoadingإلىNotLoadingبعد أن تصبح حالة التحميل لكلّ من الوسيط والمصدرNotLoading، وذلك لضمان تطبيق التعديل عن بُعد. (I65619) تمت إزالة LoadParams.pageSize (كان قد تم إيقافه نهائيًا). ننصح باستخدام
LoadParams.loadSizeفي PagingSource.تكون قيمة
LoadParams.loadSizeمساوية دائمًا لقيمةPagingConfig.pageSize، باستثناء طلب التحميل الأولي الذي تكون فيه قيمةLoadParams.loadSizeمساوية لقيمةPagingConfig.initialLoadSize.إذا كنت تختبر Paging2 DataSource بدون استخدام Pager أو PagedList، قد لا يتطابق
pageSizeمعPagingConfig.pageSizeإذا كنت تضبطinitialLoadSizeأيضًا. إذا كان ذلك مهمًا لاختباراتك، جرِّب استخدام Pager أو PagedList بدلاً من ذلك، ما سيؤدي إلى ضبط PageSize الصحيح داخليًا لطُرق تحميل DataSource. (I98ac7، b/149157296)
إصلاح الأخطاء
- تم إصلاح عُطل بسبب IllegalStateException عند استخدام فواصل مع ضبط PagingConfig.maxSize. (I0ed33، b/174787528)
- تم إصلاح الخطأ الذي كان يتسبّب في عدم تعديل حالة التحميل الخاصة بالعمليتَين PREPEND وAPPEND إلى
NotLoading(endOfPaginationReached = true)مباشرةً بعد التحميل الأوّلي في حال ضبط RemoteMediator (I8cf5a). - تم إصلاح الخطأ الذي كان يؤدي إلى أن تعرض واجهات برمجة التطبيقات من جهة مقدّم العرض، مثل .snapshot() و.peek() وما إلى ذلك، القائمة السابقة (القديمة) ضمن تعديلات ListUpdateCallback.
- تم إصلاح الخطأ الذي كان يمنع عوامل تشغيل الفواصل من إضافة العناوين أو التذييلات عند استخدامها مع RemoteMediator
- تم إصلاح الخطأ الذي كان يؤدي إلى توقُّف تحديثات LoadState إلى NotLoading في حالة RemoteMediator عند الحالة Loading
- تم إصلاح الخطأ الذي كان يتسبّب في تهيئة
DataSourceالأساسية على CoroutineDispatcher غير الصحيح، وذلك عند استخدام واجهة برمجة التطبيقات المتوافقة مع الإصدار 2.0 من مكتبة Paging، أي.asPagingSourceFactory(). يؤدي ذلك إلى حلّ مشكلة تعذُّر التطبيق عن العمل وحالات ANR المحتملة، خاصةً عند استخدام التنفيذ الحالي لـ PagingSource في Room، والذي يستخدم مسار التوافق هذا.
الإصدار 3.0.0-alpha10
2 ديسمبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha10. يتضمّن الإصدار 3.0.0-alpha10 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
تمت إزالة واجهتَي برمجة التطبيقات
dataRefreshFlowوdataRefreshListenerاللتين تم إيقافهما نهائيًا لأنّهما أصبحتا غير ضروريتَين مع تحديثات loadStateFlow / Listener. بالنسبة إلى المستخدمين الذين سينقلون بياناتهم، يكون البديل عن loadStateFlow كما يلي:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
إصلاح الأخطاء
- يتم الآن نقل قيمة endOfPaginationReached الخاصة بـ RemoteMediator
REFRESHبشكل صحيح إلى تحديثات LoadState، ما يمنع تشغيلAPPENDوPREPENDعن بُعد. (I94a3f، b/155290248) - لن يؤدي عرض قائمة فارغة بسبب صفحة أولية فارغة أو بسبب فلترة مكثّفة إلى منع بدء عمليات تحميل
PREPENDأوAPPEND. (I3e702، b/168169730) - تم إصلاح المشكلة المتمثّلة في عدم استدعاء
getRefreshKeyفي عمليات الإنشاء اللاحقة لـ PagingSource عند حدوث عمليات إبطال بشكل سريع. (I45460، b/170027530)
المساهمة الخارجية
- تمت إضافة فئة مجرّدة جديدة باسم InvalidatingPagingSourceFactory
مع واجهة برمجة تطبيقات
.invalidate()التي تعيد التوجيه إلى جميع PagingSource التي تصدرها. شكرًا @claraf3. (Ie71fc، b/160716447)
المشاكل المعروفة
- قد لا تظهر العناوين والتذييلات من عملية التحويل .insertSeparators() على الفور عند استخدام RemoteMediator b/172254056
- قد يؤدي استخدام RemoteMediator إلى توقّف
LoadStateعن العمل إذا اكتملت عملية الإبطال وPagingSource.load(LoadParams.Refresh(...))قبل أن تعرضRemoteMediator.load()القيمة b/173717820
الإصدار 3.0.0-alpha09
11 نوفمبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha09. يتضمّن الإصدار 3.0.0-alpha09 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- إيقاف نهائي لطُرق dataRefreshFlow / Listener مع تضمين عبارة replaceWith. (I6e2dd)
إصلاح الأخطاء
- إصلاح الخطأ
IllegalArgumentExceptionالذي يحدث عند استخدام الفواصل مع RemoteMediator وتفعيل عملية إبطال أثناء استمرار عملية تحميل عن بُعد من المفترض أن تعرض endOfPagination (I3a260)
الإصدار 3.0.0-alpha08
28 أكتوبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha08. يتضمّن الإصدار 3.0.0-alpha08 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تم دمج صيغ Kotlin وJava الخاصة بـ
DataSource.InvalidatedCallbackمن خلال تفعيل عمليات تحويل SAM في Kotlin عبر واجهة وظيفية (متاحة في Kotlin 1.4). يؤدي ذلك أيضًا إلى إصلاح الخطأ الذي كان يتسبّب في عدم استدعاء صيغة Kotlin لعمليات رد الاتصال الخاصة بالدالة invalidate بعد تحويلها باستخدام.mapأو.mapByPage. (I1f244، b/165313046)
إصلاح الأخطاء
- تم تحسين تفاعل مكتبة Paging مع ViewPager بشكل كبير. على وجه التحديد، لن تلغي ميزة "التقسيم إلى صفحات" طلب
RemoteMediator#loadبسبب إبطال الصفحة. ولن يتم أيضًا تقديم طلب تحميل للإضافة/الإلحاق إذا كان REFRESH مطلوبًا إلى أن يكتمل طلب REFRESH بنجاح. (I6390b، b/162252536) - تم تفعيل فحص API lint للخطأ MissingGetterMatchingBuilder في androidx (I4bbea وb/138602561)
- تم إصلاح خطأ يؤدي إلى تعذُّر عمل أدوات المساعدة
.withLoadState*ConcatAdapterبسبب إرسال إشعار إلى RecyclerView من سلسلة الخلفية (I18bb5، b/170988309) - تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى منع التخزين المؤقت المسبق من تشغيل عمليات التحميل بشكل صحيح عند تحميل صفحة صغيرة جدًا غير فارغة.Iffda3 b/169259468
الإصدار 3.0.0-alpha07
1 تشرين الأول (أكتوبر) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha07. يتضمّن الإصدار 3.0.0-alpha07 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تقبل الآن عوامل تشغيل Async PagingData المستندة إلى Guava وسيطًا من النوع Executor للتحكّم في سياق التنفيذ. (Id4372)
إصلاح الأخطاء
- تم إصلاح الخطأ IndexOutOfBounds الذي تم رصده في RemoteMediator بسبب حالة تزامن. (I00b7f، b/165821814)
- تم إصلاح مشكلة التزامن في عملية التحويل من DataSource إلى PagingSource، والتي كان من الممكن أن تؤدي إلى تجاهل PagingSource الناتج لإشارات الإبطال من DataSource.
- تم إصلاح مشكلة في منطق جلب الصفحات كانت تؤدي أحيانًا إلى عدم رصد الأجيال الجديدة من PagingSource إلى أن يتم استدعاء PagingDataAdapter.refresh()
- تم إصلاح مشكلة كانت تؤدي أحيانًا إلى فقدان موضع التمرير عند استخدام DataSource تم تحويله إلى PagingSource (مثل العنصر الذي تنتجه Room)، وذلك بالتزامن مع RemoteMediator
المساهمة الخارجية
- نشكر @simonschiller على إضافة عوامل تشغيل التحويل غير المتزامن المستندة إلى RxJava2 وRxJava3 وGuava إلى PagingData.
الإصدار 3.0.0-alpha06
2 سبتمبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha06. يتضمّن الإصدار 3.0.0-alpha06 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- يتم الآن عرض الخطأ
UnsupportedOperationExceptionمع رسالة أوضح بشأن عدم توفّر أرقام تعريف ثابتة عند استدعاءPagingDataAdapter.setHasStableIds. (Ib3890، b/158801427)
إصلاح الأخطاء
- لم يعُد insertSeparators يفلتر الصفحات الفارغة، ما يسمح للمُقدِّم بالالتزام بمسافة الجلب المسبق حتى في الحالات التي يتم فيها إدراج العديد من الصفحات الفارغة. (I9cff6، b/162538908)
الإصدار 3.0.0-alpha05
19 آب (أغسطس) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha05. يتضمّن الإصدار 3.0.0-alpha05 هذه التعديلات.
إصلاح الأخطاء
- تتضمّن ميزة التقسيم إلى صفحات الآن عملية جلب مسبق صحيحة للصفحات حتى عندما يتم فلترة البيانات المعروضة بشكل كبير
- لم يعُد عرض
LoadResult.Errorعند إعادة تحميل الصفحة يؤدي إلى إعادة تشغيل عملية إعادة المحاولة بشكل غير صحيح.
المساهمة الخارجية
- نشكر Clara F على مساعدتها في إزالة بعض الاختبارات. (549612)
الإصدار 3.0.0-alpha04
5 آب (أغسطس) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha04. يتضمّن الإصدار 3.0.0-alpha04 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة التطبيقات
peek()إلىAsyncPagingDataDifferوPagingDataAdapterللسماح بالوصول إلى البيانات المعروضة بدون تحميل الصفحات التي تؤدي إلى تشغيلها. (I38898، b/159104197) - تمت إضافة واجهة برمجة تطبيقات
snapshot()إلىPagingDataAdapterوAsyncPagingDataDifferللسماح باسترداد العناصر المعروضة بدون بدء عملية جلب الصفحة. (I566b6، b/159104197) - تمت إضافة الدالة الإنشائية
PagingData.from(List<T>)للسماح بعرض القوائم الثابتة، والتي يمكن دمجها مع تدفق PagingData العام لعرض القوائم الثابتة في حالات معيّنة، مثلاً قبل انتهاء عملية REFRESH الأولية أو ببساطة لاختبار عمليات التحويل. (Id134d) - إيقاف واجهات برمجة التطبيقات DataRefresh Flow / Listener نهائيًا لأنّها كانت تهدف إلى عرض حالة العناصر المعروضة عند إعادة التحميل، ولكن مع التحسينات التي أُجريت على توقيت معاودة الاتصال في loadState Flow / Listener، والخاصية itemCount، أصبحت هذه الواجهات غير ضرورية (Ia19f3)
- تمت إضافة برامج تضمين متوافقة مع RxJava3 لكل من
PagingSourceوRemoteMediator(I49ef3، b/161480176)
إصلاح الأخطاء
- يتم الآن وضع علامة بشكل صحيح على
PositionalDataSourceالذي تم تحويله إلىPagingSourceباستخدام أداة المساعدةtoPagingSourceFactory، بما في ذلكPagingSourceالذي تم إنشاؤه بواسطة Room، وذلك لإتاحة الانتقال إليه. (I3e84c، b/162161201) - تم إصلاح خطأ كان يؤدي أحيانًا إلى حدوث تعارض عند استخدام الإصدار المتزامن من submitData، ما كان يتسبّب في حدوث
ClosedSendChannelException(I4d702، b/160192222)
المساهمة الخارجية
- نشكر Zac Sweers على إضافة برامج تضمين متوافقة مع RxJava3 نيابةً عن Slack. (I49ef3، b/161480176)
الإصدار 3.0.0-alpha03
22 تموز (يوليو) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha03. يتضمّن الإصدار 3.0.0-alpha03 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- أصبح الآن من الممكن الوصول إلى الدالة الإنشائية PagingState، ما يسهّل اختبار عمليات تنفيذ getRefreshKey() (I8bf15)
- إخفاء أشكال مختلفة من دالة الخريطة في Kotlin الخاصة بـ DataSource عن Java، وذلك لإزالة الغموض بين الأشكال الأصلية وأشكال Kotlin (If7b23، b/161150011)
- تم وضع العلامة @JvmSynthetic على واجهات برمجة التطبيقات المكرّرة التي تهدف إلى تسهيل الاستخدام على مطوّري Kotlin (I56ae5).
- تمت إضافة عمليات تحميل زائدة لمنشئ LoadResult.Page الذي يضبط القيم التلقائية لـ itemsBefore وitemsAfter على COUNT_UNDEFINED (I47849)
- تم تعديل عوامل تشغيل PagingData الحالية لتتوافق مع طرق تعليق التنفيذ، وتمت إضافة عوامل تشغيل mapSync وflatMapSync وfilterSync الجديدة غير المعلقة لمستخدمي Java. تم نقل طرق التحويل الحالية إلى دوال إضافية، لذا على مستخدمي Kotlin استيرادها الآن. (I34239، b/159983232)
إصلاح الأخطاء
- ستعرض الآن PagingSources الخاصة بـ Room (وPositionalDataSource) فاصلة بادئة كجزء من الصفحة الأولى، وبالتالي لن يحتاج المستخدم إلى التمرير للعثور عليها. (I6f747، b/160257628)
- تؤدي عمليات الوصول إلى العناصر في العناصر النائبة الآن إلى تشغيل عمليات تحميل PagingSource بشكل صحيح إلى أن يتم عرض صفحة تستوفي الفهرس المطلوب بعد أن يتم تحويلها باستخدام PagingData.filter() (I95625 وb/158763195).
- تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى منع PagingDataAdapter.retry() من إعادة المحاولة عند ظهور خطأ أثناء التمرير بعد أن تعرض PagingSource خطأ. (I1084f، b/160194384)
- تم إصلاح مشكلة عدم تحميل الصفحات بعد إغلاق صفحة، على الرغم من أنّ إذن الوصول إلى الصفحة كان ضمن prefetchDistance (Ie95ae، b/160038730).
- لم يعُد ضبط PagingConfig.maxSize يتيح استخدام العناصر النائبة بعد حدث الإفلات (I2be29، b/159667766)
الإصدار 3.0.0-alpha02
24 يونيو 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha02. يتضمّن الإصدار 3.0.0-alpha02 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة عمليات تحميل زائدة لمنشئ
PagingConfigمع قيم تلقائية شائعة (I39c50، b/158576040) - تمت إضافة عمليات تحميل زائدة للدوال الإنشائية الخاصة بالفئتين
PagingDataAdapterوAsyncPagingDataDifferمع قيم تلقائية شائعة (Ie91f5) - تعرض واجهتا برمجة التطبيقات للمحوّل،
dataRefreshFlowوdataRefreshListener، الآن قيمة منطقية للإشارة إلى ما إذا كانتPagingDataفارغة (I6e37e، b/159054196) - تمت إضافة واجهات برمجة تطبيقات RxJava وGuava إلى RemoteMediator - RxRemoteMediator وListenableFutureRemoteMediator
- تمت إضافة أدوات مساعدة إلى PagingState للوصول إلى العناصر الشائعة، مثل
isEmpty()وfirstItemOrNull()(I3b5b6 وb/158892717).
إصلاح الأخطاء
- يتحقّق أداة Pager الآن من إعادة استخدام PagingSource في المصنع، وذلك لمنع إعادة الاستخدام غير المقصودة لـ PagingSource غير الصالحة، والتي أدّت إلى ظهور خطأ غير واضح (I99809، b/158486430)
- لم تعُد حالات تعذُّر تنفيذ RemoteMediator REFRESH تمنع PagingSource من التحميل (I38b1b، b/158892717)
- لم يعُد الإصدار غير المعلق من
submitDataيتسبّب في حدوث عطل بسبب عملية جمع متزامنة على عدةPagingDataعند استدعائه بعد الإصدار المعلق منsubmitData. (I26358، b/158048877) - تم إصلاح الاستثناء "لا يمكن جمع البيانات مرتين من أداة عرض الصفحات" الذي كان يمكن أن يحدث بعد تغيير الإعداد (I58bcc، b/158784811)
الإصدار 3.0.0-alpha01
10 يونيو 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha01. يتضمّن الإصدار 3.0.0-alpha01 هذه التعديلات.
تم تعديل مكتبة Paging Library إلى الإصدار 3.0 لتفعيل العديد من الميزات الرئيسية الجديدة.
الميزات الجديدة في الإصدار 3.0
- توافق تام مع إجراءات Kotlin الفرعية وFlow
- إتاحة التحميل غير المتزامن باستخدام وظائف تعليق الروتينات المشتركة أو عناصر RxJava Single أو Guava ListenableFuture الأساسية
- حالة التحميل المضمّنة وإشارات الخطأ لتصميم واجهة مستخدم متجاوبة، بما في ذلك وظيفة إعادة المحاولة وإعادة التحميل
- تحسينات على طبقة المستودع
- واجهة مبسطة لمصدر البيانات
- تقسيم الشبكة وقاعدة البيانات إلى صفحات بشكل مبسط
- الدعم بشأن الإلغاء
- تحسينات على طبقة العرض
المشاكل المعروفة
- لم تتوفّر مستندات Java الخاصة بمكتبة Paging 3 بعد. في الوقت الحالي، يُرجى استخدام الأدلة المرتبطة أعلاه أو مستندات Kotlin. (b/158614050)
الإصدار 2.1.2
الإصدار 2.1.2
18 مارس 2020
تم طرح androidx.paging:paging:2.1.2. يتضمّن الإصدار 2.1.2 هذه التعديلات مقارنةً بالإصدار 2.1.0.
إصلاح الأخطاء
- تم إصلاح المشكلة في
IndexOutOfBoundsExceptionفي حالات نادرة عند تحويل موضع أثناء الإبطال.
مشكلة الإصدار
تم إصدار الإصدار
2.1.1من نظام التقسيم إلى صفحات بشكل غير صحيح من فرع تم إعداده بشكل خاطئ، ما أدى إلى عرض واجهات برمجة تطبيقات ووظائف تم تنفيذها جزئيًا وسيتم طرحها في إصدار مستقبلي.يتضمّن الإصدار
2.1.2إصلاحًا لمشكلة توسيط التحميل تم إصداره في الأصل في الإصدار 2.1.1، ولكن تم هذه المرة اختيار الإصدار 2.1.0 بشكل صحيح. ننصح بشدة بالترقية إلى هذا الإصدار إذا كنت تستخدم الإصدار 2.1.1 حاليًا.
الإصدار 2.1.1
الإصدار 2.1.1
18 كانون الأول (ديسمبر) 2019
تم طرح androidx.paging:paging-*:2.1.1. يتضمّن الإصدار 2.1.1 هذه التعديلات.
إصلاح الأخطاء
- يتم الآن توسيط عمليات التحميل الأولية المتجاورة من PositionalDataSources حول آخر عملية وصول عند إيقاف العناصر النائبة
الإصدار 2.1.0
الإصدار 2.1.0
25 يناير 2019
تم إصدار الإصدار 2.1.0 من نظام تقسيم الذاكرة إلى صفحات بدون أي تغييرات عن الإصدار 2.1.0-rc01.
الإصدار 2.1.0-rc01
6 كانون الأول (ديسمبر) 2018
تم إصدار الإصدار 2.1.0-rc01 من نظام تقسيم الذاكرة إلى صفحات بدون أي تغييرات عن الإصدار 2.1.0-beta01.
الإصدار 2.1.0-beta01
1 نوفمبر 2018
تم إصدار الإصدار 2.1.0-beta01 من نظام تقسيم الذاكرة إلى صفحات بدون أي تغييرات عن الإصدار 2.1.0-alpha01.
الإصدار 2.1.0-alpha01
12 أكتوبر 2018
تتضمّن مكتبة 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 مع تحديثات أخرى في واجهة المستخدم. b/73781068 - تمت إضافة
PagedList.getLoadedCount()لإعلامك بعدد العناصر الموجودة في الذاكرة. يُرجى العِلم أنّ قيمة العائد تساوي دائمًا.size()في حال إيقاف العناصر النائبة.
إصلاح الأخطاء
- تم إصلاح مشكلة التزامن عند مقارنة الاختلافات في حال إعادة استخدام القوائم b/111591017
- تُصدر الدالة
PagedList.loadAround()الآن الخطأIndexOutOfBoundsExceptionعندما يكون الفهرس غير صالح. في السابق، كان من الممكن أن يتعطّل التطبيق بسبب خطأ غير واضح. - تم إصلاح مشكلة عدم تحميل أي بيانات إضافية عند استخدام حجم تحميل أوّلي صغير جدًا مع بيانات لم يتم تغييرها b/113122599
الإصدار 2.0.0
الإصدار 2.0.0
1 أكتوبر 2018
تم إصدار ميزة "تقسيم النتائج إلى صفحات" 2.0.0 مع إصلاح خطأ واحد.
إصلاح الأخطاء
- تم إصلاح عُطل كان يمكن أن يحدث عند التمرير السريع جدًا باستخدام
PositionalDataSourceوعناصر نائبة b/114635383.
الإصدار 2.0.0-beta01
2 يوليو 2018
إصلاح الأخطاء
- تم إصلاح مشكلة اختفاء المحتوى في بعض حالات الإضافة في المقدّمة (تم إيقاف العناصر النائبة، PositionalDataSource) b/80149146
- (تم طرح هذا الإصلاح في
1.0.1) تم إصلاح الأعطال التي كانت تحدث عندما يتعذّر علىPagedListAdapterوAsyncPagedListDifferإرسال إشارات إلى أحداث النقل. b/110711937
التبعيات قبل AndroidX
بالنسبة إلى إصدارات Paging السابقة لإصدار AndroidX التي تلي ذلك، أدرِج التبعيات التالية:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
الإصدار 1.0.1
الإصدار 1.0.1
26 حزيران (يونيو) 2018
تم طرح ميزة "التقسيم إلى صفحات" 1.0.1 مع إصلاح خطأ واحد في runtime. ننصحك بشدة باستخدام 1.0.1 لتحقيق الثبات. تم أيضًا إصدار Paging RxJava2 1.0.1، وهو مطابق للإصدار 1.0.0-rc1.
إصلاح الأخطاء
- تم إصلاح الأعطال التي كانت تؤدي إلى عدم إرسال إشارات أحداث النقل في
PagedListAdapterوAsyncPagedListDiffer. b/110711937
الإصدار 1.0.0 من RxJava2
RxJava2 Version 1.0.0-rc1
16 مايو 2018
سيتم نقل الإصدار 1.0.0-rc1 من مكتبة Paging RxJava2 إلى الإصدار المحتمَل بدون أي تغييرات عن الإصدار الأوّلي من قناة ألفا.
الإصدار 1.0.0
الإصدار 1.0.0-rc1
19 أبريل 2018 الإصدار المحتمَل من ميزة "تقسيم النتائج إلى صفحات"
ليس لدينا أي مشاكل معروفة أو ميزات جديدة مقرَّر طرحها في إصدار 1.0.0 من "التصفّح". يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1 ومساعدتنا في اختبارها لنتمكّن من إطلاق 1.0.0 ثابتة.
لا تتضمّن هذه النسخة أي تغييرات، وهي مماثلة للنسخة 1.0.0-beta1.
الإصدار 1.0.0-beta1
5 أبريل 2018
ستكون ميزة "التقسيم إلى صفحات" متاحة في إصدار تجريبي لفترة قصيرة قبل الانتقال إلى إصدار مرشّح.
لا نخطّط لإجراء المزيد من التغييرات على واجهة برمجة التطبيقات Paging 1.0، كما أنّنا نضع معايير عالية جدًا لأي تغييرات على واجهة برمجة التطبيقات.
تم إصدار الإصدار الأوّلي من مكتبة Paging المتوافقة مع RxJava2 كوحدة اختيارية منفصلة (android.arch.paging:rxjava2:1.0.0-alpha1)
وسيتم إصدارها بشكل منفصل مؤقتًا إلى أن تصبح ثابتة.
تقدّم هذه المكتبة الجديدة بديلاً عن LivePagedListBuilder يستند إلى RxJava2، وهي قادرة على إنشاء
Observable وFlowable، وتستقبل Scheduler بدلاً من Executor:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
الميزات الجديدة
- تمت إضافة
RxPagedListBuilderمن خلال العنصر الجديدandroid.arch.paging:rxjava2.
تغييرات واجهة برمجة التطبيقات
تغييرات على واجهة برمجة التطبيقات لتوضيح دور المنفّذين في أدوات الإنشاء:
تمت إعادة تسمية "
setBackgroundThreadExecutor()" إلى "setFetchExecutor()" (فيPagedList.BuilderوLivePagedListBuilder)تمت إعادة تسمية
setMainThreadExecutor()إلىsetNotifyExecutor()(فيPagedList.Builder).
تم ضبط عضوية
PagedList.mCallbacksعلى "خاصة".
إصلاح الأخطاء
يؤدي
LivePagedListBuilderإلى تشغيل عملية التحميل الأوليPagedListعلى المنفّذ المحدّد، بدلاً من مجموعة سلاسل IO في "مكوّنات بنية التطبيق".تم إصلاح سلوك الإبطال في أغلفة
DataSourceالداخلية (المستخدَمة لتنفيذDataSource.map، بالإضافة إلى تحميلPositionalDataSourceمع إيقاف العنصر النائب) b/77237534
الإصدار 1.0.0-alpha7
21 مارس 2018
تم إصدار ميزة "تقسيم إلى صفحات" 1.0.0-alpha7 مع ميزة "دورات الحياة" 1.1.1. بما أنّ الإصدار التجريبي alpha7 من مكتبة Paging يعتمد على نقل الفئة Function المذكورة أعلاه، عليك تعديل تبعية lifecycle:runtime إلى android.arch.lifecycle:runtime:1.1.1.
من المخطّط أن يكون الإصدار alpha7 هو الإصدار النهائي قبل أن تصبح ميزة "التصفُّح" متاحة في الإصدار التجريبي.
تغييرات واجهة برمجة التطبيقات
- تحتوي كائنات
DataSource.LoadParamsالآن على دالة إنشاء عامة، وأصبحت كائناتDataSource.LoadCallbackمجرّدة. يتيح ذلك تضمينDataSourceأو اختبارDataSourceمباشرةً باستخدام دالة معاودة اتصال وهمية. b/72600421 - أدوات الربط الخاصة بـ DataSource وDataSource.Factory
- تتيح لك السمة
map(Function<IN,OUT>)تحويل النتائج التي يتم تحميلها بواسطةDataSourceأو تضمينها أو تزيينها. - تتيح السمة
mapByPage(<List<IN>,List<OUT>>)إجراء ذلك أيضًا للمعالجة المجمّعة (على سبيل المثال، إذا كانت العناصر التي تم تحميلها من SQL تحتاج إلى الاستعلام عن قاعدة بيانات منفصلة، يمكن إجراء ذلك كمجموعة).
- تتيح لك السمة
- تمت إضافة
PagedList#getDataSource()كطريقة ملائمة b/72611341 - تمت إزالة جميع الفئات المتوقّفة نهائيًا من واجهة برمجة التطبيقات، بما في ذلك بقايا الحزمة
recyclerview.extensionsوLivePagedListProvider. - تم تغيير
DataSource.Factoryمن واجهة إلى فئة مجرّدة لتفعيل وظيفة الخريطة.
إصلاح الأخطاء
- تم تغيير حالة أدوات الإنشاء إلى "نهائية". b/70848565
- تم الآن إصلاح عملية تنفيذ Room
DataSourceللتعامل مع طلبات البحث المتعددة الجداول، ويتضمّن الإصدار 1.1.0-beta1 من Room هذا الإصلاح، كما هو موضّح أعلاه. - تم إصلاح خطأ كان يؤدي إلى عدم استدعاء
BoundaryCallback.onItemAtEndLoadedلـPositionalDataSourceفي حال تفعيل العناصر النائبة وكان الحجم الإجمالي مضاعفًا دقيقًا لحجم الصفحة.
الإصدار 1.0.0-alpha5
22 يناير 2018
إصلاح الأخطاء
- إصلاح مشكلة تحميل الصفحة عند إيقاف العناصر النائبة b/70573345
- تسجيل إضافي لتتبُّع الخطأ IllegalArgumentException b/70360195 (وإصلاح تجريبي من جهة Room)
- إصلاحات في الرموز النموذجية في Javadoc b/70411933 وb/71467637