ترقيم الصفحات
يسرد هذا الجدول جميع العناصر في المجموعة androidx.paging.
| العناصر | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
|---|---|---|---|---|
| paging-* | 3.3.6 | - | - | 3.4.0-alpha02 |
| paging-compose | 3.3.6 | - | - | 3.4.0-alpha02 |
تعريف التبعيات
لإضافة تبعية على مكتبة 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-alpha02" }
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-alpha02") }
للحصول على معلومات حول استخدام إضافات Kotlin، راجِع مستندات KTX.
لمزيد من المعلومات حول العناصر التابعة، يُرجى الاطّلاع على إضافة عناصر تابعة للإنشاء.
الملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.
يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.
الإصدار 3.4
الإصدار 3.4.0-alpha02
30 يوليو 2025
تم طرح androidx.paging:paging-*:3.4.0-alpha02. يحتوي الإصدار 3.4.0-alpha02 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- يتيح
PagingData.fromالآن ضبطplaceholdersBeforeوplaceholdersAfter. يُرجى العِلم أنّ التنقّل بين هذه العناصر النائبة لا يؤدي إلى تحميلها. (I06983)
الإصدار 3.4.0-alpha01
2 يوليو 2025
تم طرح androidx.paging:paging-*:3.4.0-alpha01. يحتوي الإصدار 3.4.0-alpha01 على عمليات الدمج هذه.
الميزات الجديدة
- أضافت ميزة "تقسيم الصفحات" استهدافات KMP التالية: watchos وtvos وmingwX64 وwatchosDeviceArm64 وlinuxArm64. (I237dd، Ia62b3، b/368046982، Icf15d، b/364652024، I139d3، b/338268719)
إصلاح الأخطاء
- لن يتم بعد الآن عرض استثناءات من
PagingLoggerعند استدعاء اختبارات الوحدات في Android للإصدار 3.3 أو إصدار أحدث من مكتبة Paging (Ia9400، b/331684448). - تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
RecyclerViewIndexOutOfBoundsExceptionعند تنقّل المستخدم أثناء تعديل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 المتعددة: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في حالة Error أوNotLoading، على التوالي. تمت أيضًا إضافة طريقة جديدةawaitNotLoading()لإنشاء دوال برمجية بلغة Kotlin علىFlow<CombinedLoadStates>تنتظر إلى أن يتم تحميل البيانات في حالةNotLoadingأو حالة الخطأ. - ترسل السمة
PagingData.empty()الآن حالاتNotLoadingتلقائيًا ما لم يتم تمريرLoadStatesمخصّصة إلى أداة الإنشاء الخاصة بها. يختلف هذا عن السلوك الحالي الذي لا يتم فيه إرسالLoadStatesعند إرساله إلىPagingDataAdapterأو يتم فيه إرسال حالات التحميل عند تجميعها كـLazyPagingItems. عندما يتم جمعها كـLazyPagingItems، ستعرض الآن أيضًا قائمة فارغة فور الإنشاء الأولي.
التوافق مع Kotlin Multiplatform
تتوفّر الآن عناصر Paging متوافقة مع Kotlin Multiplatform، ويعود الفضل في ذلك إلى حدّ كبير إلى العمل الذي تمّت ترقيته من مشروع multiplatform-paging في CashApp.
- نقلت
paging-commonجميع واجهات برمجة التطبيقات في Paging 3 إلىcommon، وأصبحت الآن متوافقة مع jvm وiOS بالإضافة إلى Android. - تم نقل رمز
paging-testingإلىcommon، وأصبح متوافقًا الآن مع jvm وiOS بالإضافة إلى Android. - نقلت
paging-composeالرمز البرمجي إلىcommonوأصدرت عنصر Android، ما يتيح التوافق مع الأنظمة الأساسية المتعددة فيandroidx.compose. - ستبقى "
paging-runtime" و"paging-guava" و"paging-rxjava2" و"paging-rxjava3" متاحة على أجهزة Android فقط.
الإصدار 3.3.0-rc01
1 مايو 2024
تم إصدار androidx.paging:paging-*:3.3.0-rc01 بدون أي تغييرات في الإصدار 3.3.0-beta01 من Paging. يحتوي الإصدار 3.3.0-rc01 على عمليات الدمج هذه.
الإصدار 3.3.0-beta01
3 أبريل 2024
تم إصدار androidx.paging:paging-*:3.3.0-beta01 بدون أي تغييرات ملحوظة. يحتوي الإصدار 3.3.0-beta01 على عمليات الإيداع هذه.
الإصدار 3.3.0-alpha05
20 مارس 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha05. يحتوي الإصدار 3.3.0-alpha05 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تستخدم مكتبة Paging الآن التعليق التوضيحي
@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 وواجهة المستخدم الحقيقية التي تحتاج إليها عادةً لمحاكاة عملية الدمج الكاملة في Paging.
يجب اعتبار TestPager عنصرًا زائفًا، أي عنصرًا بديلًا للاختبار يحاكي التنفيذ الفعلي لـ Pager مع توفير مساحة سطح مبسطة لواجهة برمجة التطبيقات لاختبار PagingSource. هذه الواجهات هي واجهات suspend ويجب تشغيلها ضمن runTest كما هو موضّح في دليل اختبار إجراءات Kotlin الفرعية على Android.
يمكن العثور على مثال على استخدام واجهات برمجة التطبيقات هذه في اختبارات room-paging التي تمت إعادة تصميمها لاستخدام TestPager.
تغييرات واجهة برمجة التطبيقات
- تتيح هذه السمة تكرارًا مناسبًا على
LoadResult.Page.dataمن خلالLoadResult.Page.iterator(). يسمح ذلك بشكل غير مباشر باستخدام طريقة مكتبة Kotlin العاديةflattenعند توفيرList<LoadResult.Page>، مثل الخاصيةpagesالخاصة بـPagingStateالتي يتم تمريرها إلى الطريقةPagingSource.getRefreshKey. (Ie0718)
الإصدار 3.2.0-alpha02
10 أغسطس 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha02. يحتوي الإصدار 3.2.0-alpha02 على عمليات الدمج هذه.
الميزات الجديدة
- توفّر الآن ميزة "التقسيم إلى صفحات" السجلات من خلال الفئتين
AsyncPagingDataDifferأوPagingDataAdapterلعرض معلومات تصحيح الأخطاء التي تم جمعها منPagingData. - يمكن تفعيل السجلّات باستخدام الأمر
adb 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)لم يعُد
.loadStateFlowو.addLoadStateListenerفي واجهات برمجة التطبيقات الخاصة بالعروض التقديمية يرسلان بشكل مكرّرCombinedLoadStatesأوليًا يكون دائمًا في حالةnullلوسطاء العرض وفي حالةNotLoading(endOfPaginationReached = false)للمصدر. ويعني هذا أنّ:- سيتم دائمًا ملء حالات الوسيط إذا كنت تستخدم 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 من Compose. (Ib1918، b/255283378)
الإصدار 1.0.0-alpha18
8 شباط (فبراير) 2023
تم إصدار androidx.paging:paging-compose:1.0.0-alpha18 بدون أي تغييرات. يتضمّن الإصدار 1.0.0-alpha18 عمليات الإيداع هذه.
الإصدار 1.0.0-alpha17
24 أكتوبر 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha17. يحتوي الإصدار 1.0.0-alpha17 على عمليات الإيداع هذه.
الميزات الجديدة
- إتاحة استخدام
CoroutineContextمخصّص عند الاتصال بـcollectLazyPagingItems(I7a574 وb/243182795 وb/233783862)
الإصدار 1.0.0-alpha16
10 أغسطس 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha16. يحتوي الإصدار 1.0.0-alpha16 على عمليات الإيداع هذه.
الميزات الجديدة
- توفّر ميزة "التقسيم إلى صفحات" الآن سجلات من خلال الفئة
LazyPagingItemsلعرض معلومات تصحيح الأخطاء التي تم جمعها من PagingData. - يمكن تفعيل السجلات باستخدام الأمر
adb 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 الرمزprefetchDistance.
الإصدار 3.0.0-beta01
10 شباط (فبراير) 2021
تم طرح androidx.paging:paging-*:3.0.0-beta01. يحتوي الإصدار 3.0.0-beta01 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تعرض الآن أغلفة Rx2 وRx3 التعليق التوضيحي التجريبي الذي تعتمد عليه. إذا كنت تستخدم أغلفة Rx المتوافقة في paging-rxjava2 أو paging-rxjava3، عليك الآن إضافة التعليق التوضيحي
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d) إلى الاستخدامات.
إصلاح الأخطاء
- تم إصلاح الخطأ
IndexOutOfBoundsException: Inconsistency detectedالذي كان يظهر أحيانًا عند استخدام الإصدار 2 من واجهات برمجة التطبيقاتDataSourceمن خلال مسارات التوافق - تم الآن إطلاق طلب
isInvalidأثناء عملية تهيئةDataSourceعند استخدامه من خلال مسارات التوافق بشكل صحيح على fetchDispatcher بدلاً من تنفيذه على سلسلة التعليمات الرئيسية. يؤدي ذلك إلى إصلاحIllegalStateExceptionبسبب الوصول إلى قاعدة البيانات في سلسلة التعليمات الرئيسية عند استخدام تنفيذPagingSourceفي Room.
الإصدار 3.0.0-alpha13
27 يناير 2021
تم طرح androidx.paging:paging-*:3.0.0-alpha13. يحتوي الإصدار 3.0.0-alpha13 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- لم يعُد تنفيذ
PagingSource.getRefreshKeyاختياريًا، بل أصبح دالة مجرّدة بدون تنفيذ تلقائي. يمكن للمستخدمين الذين ينقلون البيانات إما مواصلة عرض التنفيذ التلقائي الذي يعرضnullفقط، ولكن يجب أن يتضمّنgetRefreshKey()تنفيذًا حقيقيًا يعرض مفتاحًا استنادًا إلى موضع التمرير الحالي للمستخدم الذي يسمح لمكتبة Paging بمواصلة التحميل في منتصف إطار العرض باستخدامPagingState.anchorPositionإذا أمكن ذلك. (I4339a) InvalidatingPagingSourceFactoryهو الآن صف نهائي (Ia3b0a)- السماح بضبط سلوك فاصل المحطة الطرفية (الرأس / التذييل) باستخدام مَعلمة SeparatorType اختيارية إضافية. والخياران هما:
-
FULLY_COMPLETE- السلوك الحالي: انتظِر إلى أن يحدّد كل من PagingSource وRemoteMediator أنّ endOfPaginationReached قد تم الوصول إليه قبل إضافة فواصل نهائية. في حال عدم استخدام RemoteMediator، سيتم تجاهل remote loadState. يكون ذلك مفيدًا بشكل أساسي إذا كنت تريد عرض فواصل الأقسام فقط عند تحميل القسم بالكامل، بما في ذلك استرجاع البيانات من مصدر بعيد، مثل الشبكة. -
SOURCE_COMPLETE- الانتظار فقط إلى أن تحدّد PagingSource endOfPaginationReached حتى إذا تم استخدام RemoteMediator يتيح ذلك عرض الرؤوس والتذييلات بشكل متزامن مع عملية التحميل الأولية، ما يمنع المستخدمين من الحاجة إلى التمرير للاطّلاع على الفواصل النهائية. (Ibe993، b/174700218)
-
إصلاح الأخطاء
- تم إصلاح مشكلة نادرة لتسرُّب الذاكرة تحدث عند إبطال صحة PagingSource قبل أن يتمكّن PageFetcher من بدء التحميل منها. (I9606b، b/174625633)
الإصدار 3.0.0-alpha12
13 كانون الثاني (يناير) 2021
تم طرح androidx.paging:paging-*:3.0.0-alpha12. يحتوي الإصدار 3.0.0-alpha12 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- لم تعُد InvalidatingPagingSourceFactory فئة مجرّدة لأنّها لم تتضمّن أي طرق مجرّدة. (I4a8c4)
- تمت إضافة تحميل زائد للدالة .cachedIn() يقبل ViewModel بدلاً من Lifecycle أو CoroutineScope لمستخدمي Java. (I97d81، b/175332619)
- السماح لمستخدمي Java بإجراء عمليات تحويل PagingData بشكل غير متزامن، وذلك من خلال قبول Executor في وسيطات عامل التشغيل transform. تمت إزالة اللاحقة -Sync من جميع عوامل تشغيل التحويل -Sync، وسيحتاج مستخدمو Kotlin Coroutine إلى إزالة الغموض عن طريق استدعاء دالة الإضافة التي تقبل كتلة تعليق بدلاً من ذلك.
تم نقل جميع عوامل تشغيل تحويل PagingData إلى الإضافات
ضمن فئة PagingDataTransforms الثابتة. على مستخدمي Java استدعاء هذه الدوال المساعدة الثابتة، مثل:
PagingDataTransforms.map(pagingData, transform)بالنسبة إلى مستخدمي Kotlin، يكون بناء الجملة هو نفسه، ولكن عليك استيراد الدالة. (If6885، b/172895919)
إصلاح الأخطاء
- تم إصلاح الخطأ الذي لم يتم فيه استدعاء
RemoteMediator.load()أثناءadapter.refresh()إذا تم الوصول إلى نهاية تقسيم الصفحات.
الإصدار 3.0.0-alpha11
16 كانون الأول (ديسمبر) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha11. يحتوي الإصدار 3.0.0-alpha11 على عمليات الإيداع هذه.
الميزات الجديدة
- تمت إضافة ميزة حفظ الحالة للحالات الأساسية التالية (لا يزال العمل جارٍ على توفير الدعم الكامل، خاصةً في حالة المصدر ذي الطبقات):
- يتم تخزين التدفق مؤقتًا ولا يتم إيقاف التطبيق (على سبيل المثال، يتم تخزين التدفق مؤقتًا في نموذج عرض ويتم إعادة إنشاء النشاط في العملية)
- يتم احتساب مصدر التقسيم إلى صفحات، ويتم تفعيل العناصر النائبة، ولا يكون التنسيق متداخلاً.
تغييرات واجهة برمجة التطبيقات
- أصبحت السمة
PagingSource.getRefreshKey()الآن واجهة برمجة تطبيقات ثابتة (I22f6f، b/173530980) - لم يعُد
PagingSource.invalidateدالة مفتوحة. إذا كنت بحاجة إلى تلقّي إشعار عند حدوث الإبطال، ننصحك باستخدام طريقة registerInvalidatedCallback بدلاً من إلغاء طريقة invalidate. (I628d9، b/173029013، b/137971356) - يتضمّن Pager الآن أداة إنشاء تجريبية واحدة إلى جانب أدوات الإنشاء العادية، بدلاً من تسريب واجهات برمجة التطبيقات التجريبية إلى واجهة برمجة التطبيقات العامة غير التجريبية من خلال التعليق التوضيحي الذي يتطلّب الموافقة. (I9dc61، b/174531520)
- تم تعديل خصائص الراحة،
CombinedLoadStates.refresh،CombinedLoadStates.prepend،CombinedLoadStates.appendللانتقال فقط منLoadingإلىNotLoadingبعد أن تصبح حالة التحميل لكل من الوسيط والمصدرNotLoading، وذلك لضمان تطبيق التعديل عن بُعد. (I65619) تمت إزالة LoadParams.pageSize (كانت هذه السمة متوقّفة نهائيًا). ننصح باستخدام
LoadParams.loadSizeفي PagingSource.تكون قيمة
LoadParams.loadSizeمساوية دائمًا لقيمةPagingConfig.pageSize، باستثناء طلب التحميل الأولي الذي تكون فيه قيمةLoadParams.loadSizeمساوية لقيمةPagingConfig.initialLoadSize.إذا كنت تختبر Paging2 DataSource بدون استخدام Pager أو PagedList، قد لا يتطابق
pageSizeمعPagingConfig.pageSizeإذا كنت تضبطinitialLoadSizeأيضًا. إذا كان ذلك مهمًا لاختباراتك، جرِّب استخدام Pager أو PagedList بدلاً من ذلك، ما سيؤدي إلى ضبط PageSize الصحيح داخليًا لطُرق تحميل DataSource. (I98ac7، b/149157296)
إصلاح الأخطاء
- تم إصلاح عُطل بسبب IllegalStateException عند استخدام الفواصل مع ضبط PagingConfig.maxSize. (I0ed33، b/174787528)
- تم إصلاح الخطأ الذي كان يتسبّب في عدم تعديل حالة التحميل الخاصة بـ PREPEND / APPEND إلى
NotLoading(endOfPaginationReached = true)مباشرةً بعد التحميل الأوّلي في حال ضبط RemoteMediator (I8cf5a). - تم إصلاح الخطأ الذي كان يؤدي إلى أن تعرض واجهات برمجة التطبيقات من جهة مقدّم العرض، مثل .snapshot() و.peek() وما إلى ذلك، القائمة السابقة (القديمة) ضمن تعديلات ListUpdateCallback.
- تم إصلاح الخطأ الذي كان يمنع عوامل تشغيل الفواصل من إضافة العناوين أو التذييلات عند استخدامها مع RemoteMediator
- تم إصلاح الخطأ الذي كان يؤدي إلى توقُّف تحديثات LoadState إلى NotLoading في حالة Loading بالنسبة إلى RemoteMediator
- تم إصلاح الخطأ الذي كان يتسبّب في تهيئة
DataSourceالخلفية على CoroutineDispatcher غير الصحيح، وذلك عند استخدام واجهة برمجة التطبيقات المتوافقة مع الإصدار 2.0 من مكتبة Paging،.asPagingSourceFactory(). يؤدي ذلك إلى حلّ مشكلة تعذُّر التطبيق عن العمل وحالات ANR المحتملة، خاصةً عند استخدام التنفيذ الحالي لـ PagingSource في Room، والذي يستخدم مسار التوافق هذا.
الإصدار 3.0.0-alpha10
2 ديسمبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha10. يحتوي الإصدار 3.0.0-alpha10 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
تمت إزالة واجهتَي برمجة التطبيقات
dataRefreshFlowوdataRefreshListenerاللتين تم إيقافهما نهائيًا لأنّهما أصبحتا غير ضروريتَين مع تحديثات loadStateFlow / Listener. بالنسبة إلى المستخدمين الذين سينقلون بياناتهم، يكون المكافئ loadStateFlow كما يلي:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
إصلاح الأخطاء
- يتم الآن نقل قيمة endOfPaginationReached الخاصة بـ RemoteMediator
REFRESHبشكل صحيح إلى تحديثات LoadState، ما يمنع تشغيلAPPENDوPREPENDعن بُعد. (I94a3f، b/155290248) - لن يؤدي عرض قائمة فارغة بسبب صفحة أولية فارغة أو بسبب فلترة مكثّفة إلى منع بدء عمليات تحميل
PREPENDأوAPPEND. (I3e702، b/168169730) - تم إصلاح المشكلة المتمثّلة في عدم استدعاء
getRefreshKeyفي عمليات الإنشاء اللاحقة لـ PagingSource عند حدوث عمليات إبطال بشكل سريع. (I45460، b/170027530)
المساهمة الخارجية
- تمت إضافة فئة مجرّدة جديدة باسم InvalidatingPagingSourceFactory
مع واجهة برمجة تطبيقات
.invalidate()التي تعيد التوجيه إلى جميع PagingSource التي تصدرها. شكرًا @claraf3. (Ie71fc، b/160716447)
المشاكل المعروفة
- قد لا تظهر العناوين والتذييلات من عملية التحويل .insertSeparators() على الفور عند استخدام RemoteMediator b/172254056
- قد يؤدي استخدام RemoteMediator إلى توقّف
LoadStateعن العمل إذا اكتملت عملية الإبطال وPagingSource.load(LoadParams.Refresh(...))قبل أن تعرضRemoteMediator.load()القيمة b/173717820
الإصدار 3.0.0-alpha09
11 نوفمبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha09. يحتوي الإصدار 3.0.0-alpha09 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- إيقاف نهائي لطرق dataRefreshFlow / Listener مع تضمين عبارة replaceWith. (I6e2dd)
إصلاح الأخطاء
- إصلاح الخطأ
IllegalArgumentExceptionالذي يحدث عند استخدام الفواصل مع RemoteMediator وتفعيل عملية إبطال أثناء استمرار عملية تحميل عن بُعد من المفترض أن تعرض endOfPagination (I3a260)
الإصدار 3.0.0-alpha08
28 أكتوبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha08. يحتوي الإصدار 3.0.0-alpha08 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تم دمج صيغ Kotlin / Java الخاصة بـ
DataSource.InvalidatedCallbackمن خلال تفعيل عمليات تحويل SAM في Kotlin عبر واجهة وظيفية (متاحة في Kotlin 1.4). يؤدي ذلك أيضًا إلى إصلاح الخطأ الذي كان يتسبّب في عدم استدعاء صيغة Kotlin لعمليات رد الاتصال الخاصة بالدالة invalidate بعد تحويلها باستخدام.mapأو.mapByPage. (I1f244، b/165313046)
إصلاح الأخطاء
- تم تحسين تفاعل Paging مع ViewPager بشكل كبير. على وجه التحديد، لن تلغي ميزة "التقسيم إلى صفحات" طلب
RemoteMediator#loadبسبب إبطال الصفحة. ولن يتم أيضًا تقديم طلب تحميل للإضافة/الإلحاق إذا كان REFRESH مطلوبًا إلى أن يكتمل طلب REFRESH بنجاح. (I6390b، b/162252536) - تم تفعيل فحص API lint للخطأ MissingGetterMatchingBuilder في androidx (I4bbea وb/138602561)
- تم إصلاح خطأ كان يؤدي إلى تعذُّر عمل أدوات المساعدة
.withLoadState*ConcatAdapterبسبب إرسال إشعار إلى RecyclerView من سلسلة الخلفية (I18bb5، b/170988309) - تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى منع التخزين المؤقت المسبق من تشغيل عمليات التحميل بشكل صحيح عند تحميل صفحة صغيرة جدًا غير فارغة.Iffda3 b/169259468
الإصدار 3.0.0-alpha07
1 تشرين الأول (أكتوبر) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha07. يحتوي الإصدار 3.0.0-alpha07 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تقبل الآن عوامل تشغيل Async PagingData المستندة إلى Guava وسيطة Executor للتحكّم في سياق التنفيذ. (Id4372)
إصلاح الأخطاء
- تم إصلاح الخطأ IndexOutOfBounds الذي تم رصده في RemoteMediator بسبب حالة تزامن. (I00b7f, b/165821814)
- تم إصلاح مشكلة تزامن في عملية التحويل من DataSource إلى PagingSource، ما كان يؤدي إلى تجاهل PagingSource لإشارات الإبطال من DataSource.
- تم إصلاح مشكلة في منطق جلب الصفحات كانت تؤدي أحيانًا إلى عدم رصد الأجيال الجديدة من PagingSource إلى أن يتم استدعاء PagingDataAdapter.refresh()
- تم إصلاح مشكلة كانت تؤدي أحيانًا إلى فقدان موضع التمرير عند استخدام DataSource تم تحويله إلى PagingSource (مثل العنصر الذي تنتجه Room)، وذلك بالتزامن مع RemoteMediator
المساهمة الخارجية
- نشكر @simonschiller على إضافة عوامل تشغيل التحويل غير المتزامن المستندة إلى RxJava2 وRxJava3 وGuava إلى PagingData.
الإصدار 3.0.0-alpha06
2 سبتمبر 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha06. يتضمّن الإصدار 3.0.0-alpha06 عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- يتم الآن عرض الخطأ
UnsupportedOperationExceptionمع رسالة أوضح بشأن عدم توفّر أرقام تعريف ثابتة عند استدعاءPagingDataAdapter.setHasStableIds. (Ib3890، b/158801427)
إصلاح الأخطاء
- لم يعُد insertSeparators يفلتر الصفحات الفارغة، ما يسمح للمُقدِّم بالالتزام بمسافة الجلب المسبق حتى في الحالات التي يتم فيها إدراج العديد من الصفحات الفارغة. (I9cff6، b/162538908)
الإصدار 3.0.0-alpha05
19 آب (أغسطس) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha05. يحتوي الإصدار 3.0.0-alpha05 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تتضمّن ميزة "التقسيم إلى صفحات" الآن ميزة الجلب المسبق للصفحات بشكل صحيح حتى عندما يتم فلترة البيانات المعروضة بشكل كبير
- لم يعُد عرض
LoadResult.Errorعند إعادة تحميل الصفحة يؤدي إلى إعادة تشغيل عملية إعادة المحاولة بشكل غير صحيح.
المساهمة الخارجية
- نشكر Clara F على مساعدتها في إزالة بعض الاختبارات. (549612)
الإصدار 3.0.0-alpha04
5 آب (أغسطس) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha04. يحتوي الإصدار 3.0.0-alpha04 على عمليات الدمج هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة التطبيقات
peek()إلىAsyncPagingDataDifferوPagingDataAdapterللسماح بالوصول إلى البيانات المعروضة بدون الحاجة إلى تحميل الصفحات. (I38898، b/159104197) - تمت إضافة واجهة برمجة تطبيقات
snapshot()إلىPagingDataAdapterوAsyncPagingDataDifferللسماح باسترداد العناصر المعروضة بدون بدء عملية جلب الصفحة. (I566b6، b/159104197) - تمت إضافة الدالة الإنشائية
PagingData.from(List<T>)للسماح بعرض القوائم الثابتة، والتي يمكن دمجها مع تدفق PagingData العام لعرض القوائم الثابتة في حالات معيّنة، مثلاً قبل انتهاء عملية REFRESH الأولية أو ببساطة لاختبار عمليات التحويل. (Id134d) - إيقاف واجهات برمجة التطبيقات DataRefresh Flow / Listener نهائيًا لأنّها كانت تهدف إلى عرض حالة العناصر المعروضة عند إعادة التحميل، ولكن مع التحسينات التي أُجريت على توقيت معاودة الاتصال في loadState Flow / Listener، والخاصية itemCount، أصبحت هذه الواجهات غير ضرورية (Ia19f3)
- تمت إضافة برامج تضمين متوافقة مع RxJava3 لكل من
PagingSourceوRemoteMediator(I49ef3، b/161480176)
إصلاح الأخطاء
- تم تحويل
PositionalDataSourceإلىPagingSourceباستخدامtoPagingSourceFactory، بما في ذلكPagingSourceالذي تم إنشاؤه بواسطة Room، ويتم الآن وضع علامة عليها بشكل صحيح لتتيح الانتقال السريع. (I3e84c، b/162161201) - تم إصلاح خطأ كان يؤدي أحيانًا إلى حدوث تعارض عند استخدام الإصدار المتزامن من submitData، ما كان يتسبّب في ظهور
ClosedSendChannelException(I4d702، b/160192222)
المساهمة الخارجية
- نشكر Zac Sweers على إضافة برامج تضمين متوافقة مع RxJava3 نيابةً عن Slack. (I49ef3، b/161480176)
الإصدار 3.0.0-alpha03
22 تموز (يوليو) 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha03. يحتوي الإصدار 3.0.0-alpha03 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- أصبح الآن من الممكن الوصول إلى أداة إنشاء PagingState، ما يسهّل اختبار عمليات تنفيذ getRefreshKey() (I8bf15).
- إخفاء أشكال مختلفة من دالة map في Kotlin الخاصة بـ DataSource عن Java، وذلك لحل الغموض بين الأشكال الأصلية وأشكال Kotlin (If7b23، b/161150011)
- تم وضع العلامة @JvmSynthetic على واجهات برمجة التطبيقات المكرّرة التي تهدف إلى تسهيل استخدام لغة Kotlin (I56ae5).
- تمت إضافة عمليات تحميل زائدة لمنشئ LoadResult.Page الذي يضبط قيمتَي itemsBefore وitemsAfter تلقائيًا على COUNT_UNDEFINED (I47849)
- تم تعديل عوامل تشغيل PagingData الحالية لتتوافق مع طرق تعليق التنفيذ، وتمت إضافة عوامل تشغيل mapSync وflatMapSync وfilterSync الجديدة غير المعلقة لمستخدمي Java. تم نقل طرق التحويل الحالية إلى دوال إضافية، لذا على مستخدمي Kotlin استيرادها الآن. (I34239، b/159983232)
إصلاح الأخطاء
- ستعرض الآن PagingSources الخاصة بـ Room (وPositionalDataSource) فاصلة بادئة كجزء من الصفحة الأولى، وبالتالي لن يحتاج المستخدم إلى التمرير للعثور عليها. (I6f747، b/160257628)
- تؤدي عمليات الوصول إلى العناصر في العناصر النائبة الآن إلى تشغيل عمليات تحميل PagingSource بشكل صحيح إلى أن يتم عرض صفحة تستوفي الفهرس المطلوب بعد أن يتم تحويلها باستخدام PagingData.filter() (I95625، b/158763195)
- تم إصلاح الخطأ الذي كان يؤدي أحيانًا إلى منع PagingDataAdapter.retry() من إعادة المحاولة عند ظهور خطأ أثناء التمرير بعد أن تعرض PagingSource خطأ. (I1084f، b/160194384)
- تم إصلاح مشكلة عدم تحميل الصفحات بعد إغلاق صفحة، على الرغم من أنّ إذن الوصول إلى الصفحة كان ضمن prefetchDistance (Ie95ae، b/160038730).
- لم يعُد ضبط PagingConfig.maxSize يتيح استخدام العناصر النائبة بعد حدث إسقاط (I2be29، b/159667766)
الإصدار 3.0.0-alpha02
24 يونيو 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha02. يحتوي الإصدار 3.0.0-alpha02 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة عمليات تحميل زائدة لمنشئ
PagingConfigمع قيم تلقائية شائعة (I39c50، b/158576040) - تمت إضافة عمليات تحميل زائدة للدوال الإنشائية الخاصة بالفئتين
PagingDataAdapterوAsyncPagingDataDifferمع قيم تلقائية شائعة (Ie91f5) - تعرض واجهتا برمجة التطبيقات للمحوّل،
dataRefreshFlowوdataRefreshListener، الآن قيمة منطقية للإشارة إلى ما إذا كانPagingDataفارغًا (I6e37e وb/159054196). - تمت إضافة واجهات برمجة تطبيقات RxJava وGuava إلى RemoteMediator - RxRemoteMediator وListenableFutureRemoteMediator
- تمت إضافة أدوات مساعدة إلى PagingState لتسهيل الوصول إلى العناصر الشائعة، مثل
isEmpty()وfirstItemOrNull()(I3b5b6 وb/158892717).
إصلاح الأخطاء
- يتحقّق Pager الآن من إعادة استخدام PagingSource في المصنع، وذلك لمنع إعادة الاستخدام غير المقصودة لـ PagingSource غير الصالحة، والتي أدّت إلى ظهور خطأ غير واضح (I99809، b/158486430)
- لم تعُد حالات تعذُّر تنفيذ RemoteMediator REFRESH تمنع PagingSource من التحميل (I38b1b، b/158892717)
- لم يعُد الإصدار غير المعلق من
submitDataيتسبّب في حدوث عطل بسبب عملية جمع متزامنة على عدةPagingDataعند استدعائه بعد الإصدار المعلق منsubmitData. (I26358، b/158048877) - تم إصلاح الاستثناء "لا يمكن جمع البيانات مرتين من أداة التقسيم إلى صفحات" الذي كان يمكن أن يحدث بعد تغيير الإعدادات (I58bcc، b/158784811)
الإصدار 3.0.0-alpha01
10 يونيو 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha01. يحتوي الإصدار 3.0.0-alpha01 على عمليات الدمج هذه.
تم تعديل مكتبة Paging إلى الإصدار 3.0، وذلك لتفعيل العديد من الميزات الرئيسية الجديدة.
الميزات الجديدة في الإصدار 3.0
- توافق تام مع إجراءات 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
يحتوي الإصدار 2.1.0-alpha01 من مكتبة Paging على إضافتين رئيسيتين، وهما إيقاف الصفحات ومكتبات إضافة KTX لكل عنصر، بالإضافة إلى العديد من التغييرات الأخرى في واجهة برمجة التطبيقات وإصلاح الأخطاء.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
PagedList.Config.Builder.setMaxSize()للحدّ من عدد العناصر التي يتم تحميلها في الذاكرة. - تمت إضافة
androidx.paging.Config()كبديل للغة Kotlin عنPagedList.Config.Builder - تمت إضافة
androidx.paging.PagedList()كبديل للغة Kotlin عنPagedList.Builder - تمت إضافة
DataSourceFactory.toLiveData()كبديل للغة Kotlin عنLivePagedListBuilder - تمت إضافة
DataSourceFactory.toObservable()وtoFlowable()كبديلَين للغة Kotlin عنRxPagedListBuilder - تمت إضافة
AsyncPagedListDiffer.addPagedListListener()للاستماع إلى وقت تبديل PagedList. b/111698609 - تمت إضافة صيغة
PagedListAdapter.onCurrentListChanged()التي تجتاز القائمة القديمة والجديدة، وتم إيقاف الصيغة السابقة نهائيًا. - تمت إضافة متغيرات
PagedListAdapter/AsyncPagedListDiffer.submitList()تأخذ دالة ردّ اتصال إضافية يتم تشغيلها في حال/عند عرض قائمة الصفحات، بعد إجراء عملية المقارنة. يتيح لك ذلك مزامنة عملية تبديل PagedList مع تحديثات أخرى في واجهة المستخدم. b/73781068 - تمت إضافة
PagedList.getLoadedCount()لإعلامك بعدد العناصر الموجودة في الذاكرة. يُرجى العِلم أنّ قيمة العائد تساوي.size()دائمًا في حال إيقاف العناصر النائبة.
إصلاح الأخطاء
- تم إصلاح مشكلة تداخل عند مقارنة الاختلافات إذا تمت إعادة استخدام القوائم b/111591017
- تُصدر الدالة
PagedList.loadAround()الآن الخطأIndexOutOfBoundsExceptionعندما يكون الفهرس غير صالح. في السابق، كان من الممكن أن يتعطّل التطبيق بسبب خطأ غير واضح. - تم إصلاح مشكلة عدم تحميل أي بيانات إضافية عند استخدام حجم تحميل أوّلي صغير جدًا مع بيانات لم يتم تغييرها b/113122599
الإصدار 2.0.0
الإصدار 2.0.0
1 أكتوبر 2018
تم إصدار ميزة "تقسيم النتائج إلى صفحات" 2.0.0 مع إصلاح خطأ واحد.
إصلاح الأخطاء
- تم إصلاح عُطل كان يمكن أن يحدث عند التمرير السريع جدًا باستخدام
PositionalDataSourceوعناصر نائبة b/114635383.
الإصدار 2.0.0-beta01
2 يوليو 2018
إصلاح الأخطاء
- تم إصلاح مشكلة اختفاء المحتوى في بعض حالات الإضافة في المقدّمة (تم إيقاف العناصر النائبة، PositionalDataSource) b/80149146
- (تم طرح هذا الإصلاح في
1.0.1) تم إصلاح الأعطال التي كانت تحدث عندما يتعذّر علىPagedListAdapterوAsyncPagedListDifferإرسال إشارات لأحداث النقل. b/110711937
التبعيات قبل AndroidX
بالنسبة إلى إصدارات Paging السابقة لإصدار AndroidX التي تلي ذلك، أدرِج التبعيات التالية:
dependencies {
def paging_version = "1.0.0"
implementation "android.arch.paging:runtime:$paging_version"
// alternatively - without Android dependencies for testing
testImplementation "android.arch.paging:common:$paging_version"
// optional - RxJava support
implementation "android.arch.paging:rxjava2:$paging_version"
}
الإصدار 1.0.1
الإصدار 1.0.1
26 حزيران (يونيو) 2018
تم إصدار ميزة التقسيم إلى صفحات 1.0.1 مع إصلاح خطأ واحد في runtime. ننصحك بشدة باستخدام 1.0.1 لتحقيق الثبات. تم أيضًا إصدار مكتبة Paging RxJava2 1.0.1، وهي مطابقة لمكتبة 1.0.0-rc1.
إصلاح الأخطاء
- تم إصلاح الأعطال التي كانت تؤدي إلى عدم إرسال إشارات أحداث النقل في
PagedListAdapterوAsyncPagedListDiffer. b/110711937
الإصدار 1.0.0 من RxJava2
RxJava2 Version 1.0.0-rc1
16 مايو 2018
سيتم نقل مكتبة Paging RxJava2 1.0.0-rc1 إلى الإصدار المحتمَل بدون أي تغييرات عن الإصدار الأوّلي
الإصدار الأوّلي.
الإصدار 1.0.0
الإصدار 1.0.0-rc1
19 أبريل 2018 الإصدار المحتمَل من ميزة "تقسيم النتائج إلى صفحات"
ليس لدينا أي مشاكل معروفة أو ميزات جديدة مقرَّر طرحها في إصدار 1.0.0 من "التصفّح". يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1 ومساعدتنا في اختبارها لنتمكّن من إطلاق 1.0.0 ثابتة.
لم يتم إجراء أي تغييرات في هذا الإصدار، فهو مطابق للإصدار 1.0.0-beta1.
الإصدار 1.0.0-beta1
5 أبريل 2018
ستكون ميزة "التقسيم إلى صفحات" متاحة في الإصدار التجريبي لفترة قصيرة قبل الانتقال إلى إصدار مرشّح.
لا نخطّط لإجراء المزيد من التغييرات على واجهة برمجة التطبيقات Paging 1.0، كما أنّنا نضع معايير عالية جدًا لأي تغييرات على واجهة برمجة التطبيقات.
تم إصدار الإصدار الأوّلي من مكتبة Paging المتوافقة مع RxJava2 كوحدة اختيارية منفصلة (android.arch.paging:rxjava2:1.0.0-alpha1)،
وسيتم إصدارها بشكل منفصل مؤقتًا إلى أن تصبح مستقرة.
تقدّم هذه المكتبة الجديدة بديلاً عن LivePagedListBuilder يستند إلى RxJava2، وهي قادرة على إنشاء
Observable وFlowable، وتستخدِم Scheduler بدلاً من Executor:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
الميزات الجديدة
- تمت إضافة
RxPagedListBuilderمن خلال العنصر الجديدandroid.arch.paging:rxjava2.
تغييرات واجهة برمجة التطبيقات
تغييرات في واجهة برمجة التطبيقات لتوضيح دور المنفّذين في أدوات الإنشاء:
تمت إعادة تسمية "
setBackgroundThreadExecutor()" إلى "setFetchExecutor()" (فيPagedList.BuilderوLivePagedListBuilder)تمت إعادة تسمية "
setMainThreadExecutor()" إلى "setNotifyExecutor()" (فيPagedList.Builder).
تم ضبط عضوية
PagedList.mCallbacksعلى خاصة.
إصلاح الأخطاء
يؤدي
LivePagedListBuilderإلى تشغيل عملية التحميل الأوليPagedListعلى المنفّذ المحدّد، بدلاً من مجموعة سلاسل الإدخال/الإخراج في "مكوّنات بنية التطبيق".تم إصلاح سلوك الإبطال في أغلفة
DataSourceالداخلية (المستخدَمة لتنفيذDataSource.map، بالإضافة إلى تحميلPositionalDataSourceغير المفعَّل في العنصر النائب) b/77237534
الإصدار 1.0.0-alpha7
21 مارس 2018
يتم إصدار 1.0.0-alpha7 مع مكتبة Lifecycles 1.1.1. بما أنّ الإصدار alpha7 من مكتبة Paging يعتمد على نقل الفئة Function المذكورة أعلاه، عليك تعديل تبعية lifecycle:runtime إلى android.arch.lifecycle:runtime:1.1.1.
من المخطّط أن يكون الإصدار alpha7 هو الإصدار النهائي قبل أن تصبح ميزة "التصفُّح" متاحة في الإصدار التجريبي.
تغييرات واجهة برمجة التطبيقات
- تحتوي كائنات
DataSource.LoadParamsالآن على دالة إنشاء عامة، وأصبحت كائناتDataSource.LoadCallbackمجرّدة. يتيح ذلك تضمينDataSourceأو اختبارDataSourceمباشرةً باستخدام دالة معاودة الاتصال وهمية. b/72600421 - Mappers for DataSource and DataSource.Factory
- تتيح لك السمة
map(Function<IN,OUT>)تحويل النتائج التي يتم تحميلها بواسطةDataSourceأو تضمينها أو تزيينها. - تتيح السمة
mapByPage(<List<IN>,List<OUT>>)إجراء ذلك أيضًا للمعالجة المجمّعة (على سبيل المثال، إذا كانت العناصر التي تم تحميلها من SQL تحتاج إلى الاستعلام عن قاعدة بيانات منفصلة، يمكن إجراء ذلك كمجموعة).
- تتيح لك السمة
- تمت إضافة
PagedList#getDataSource()كطريقة ملائمة b/72611341 - تمت إزالة جميع الفئات المتوقّفة نهائيًا من واجهة برمجة التطبيقات، بما في ذلك بقايا حزمة
recyclerview.extensionsوLivePagedListProvider. - تم تغيير
DataSource.Factoryمن واجهة إلى فئة مجرّدة لتفعيل وظيفة الخريطة.
إصلاح الأخطاء
- تم تغيير حالة "أدوات الإنشاء" إلى "نهائية". b/70848565
- تم الآن إصلاح عملية تنفيذ Room
DataSourceللتعامل مع طلبات البحث المتعددة الجداول، ويتضمّن هذا الإصلاح الإصدار 1.1.0-beta1 من Room، كما هو موضّح أعلاه. - تم إصلاح خطأ كان يؤدي إلى عدم استدعاء
BoundaryCallback.onItemAtEndLoadedلـPositionalDataSourceفي حال تفعيل العناصر النائبة وكان الحجم الإجمالي مضاعفًا لعدد صحيح من حجم الصفحة.
الإصدار 1.0.0-alpha5
22 يناير 2018
إصلاح الأخطاء
- إصلاح مشكلة تحميل الصفحة عند إيقاف العناصر النائبة b/70573345
- تسجيل إضافي لتتبُّع الخطأ IllegalArgumentException b/70360195 (وإصلاح تجريبي من جهة Room)
- إصلاحات الرموز النموذجية في Javadoc b/70411933 وb/71467637