ترقيم الصفحات
يسرد هذا الجدول جميع العناصر في المجموعة androidx.paging
.
العناصر | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأوّلي |
---|---|---|---|---|
paging-* | 3.3.6 | - | - | 3.4.0-alpha01 |
paging-compose | 3.3.6 | - | - | 3.4.0-alpha01 |
تعريف التبعيات
لإضافة تبعية على مكتبة 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-alpha01" }
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-alpha01") }
للحصول على معلومات حول استخدام إضافات Kotlin، راجِع مستندات KTX.
لمزيد من المعلومات حول العناصر التابعة، يُرجى الاطّلاع على إضافة عناصر تابعة للإنشاء.
الملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية من خلال النقر على زر النجمة.
يُرجى الاطّلاع على مستندات Issue Tracker للحصول على مزيد من المعلومات.
الإصدار 3.4
الإصدار 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). - تم إصلاح الخطأ الذي كان يؤدي إلى ظهور
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 المتعددة:watchos
وtvos
وlinuxArm64
(90c9768)، (53e0eca)
الإصدار 3.3.1
24 يوليو 2024
تم طرح androidx.paging:paging-*:3.3.1
. يحتوي الإصدار 3.3.1 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم إمكانية تشغيل المزيد من عمليات التحميل عند إعادة تحميل مصدر البيانات الأساسي أثناء التمرير، وذلك في
AsyncPagingDataDiffer
أو واجهات برمجة التطبيقات المستندة إليه، مثلPagingDataAdapter
المستخدَم معRecyclerView
. (I60ca5، b/352586078) - تم إصلاح عُطل يحدث عند إزالة عناصر من مصدر البيانات الأساسي أثناء التمرير في
RecyclerView
باستخدامPagingDataAdapter
أوAsyncPagingDataDiffer
. (I8c65a، b/347649763)
الإصدار 3.3.0
14 مايو 2024
تم طرح androidx.paging:paging-*:3.3.0
. يحتوي الإصدار 3.3.0 على عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 3.2.0
PagingDataPresenter
هو الآن صف علني. يمكن الآن إنشاء أدوات العرض المتوافقة مع منصات متعددة استنادًا إلىPagingDataPresenter
بدلاً من الحاجة إلى واجهات برمجة تطبيقات داخلية خاصة بالتقسيم إلى صفحات أوpaging-runtime
AsyncPagingDataDiffer
.- تمت إضافة طريقتَي مساعدة جديدتَين
LoadStates
وCombinedLoadStates
فيhasError
وisIdle
للتحقّق مما إذا كانLoadStates
في حالة 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 الآن التعليق التوضيحي
@MainThread
AndroidX Annotation للرمز البرمجي الشائع. (I78f0d، b/327682438)
الإصدار 3.3.0-alpha04
6 مارس 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha04
. يحتوي الإصدار 3.3.0-alpha04 على عمليات الدمج هذه.
إصلاح الأخطاء
- تم إصلاح أخطاء بسيطة في المستندات متعلقة بإضافة توافق Kotlin مع الأنظمة الأساسية المتعددة. (aosp/2950785)
الإصدار 3.3.0-alpha03
7 فبراير 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha03
. يحتوي الإصدار 3.3.0-alpha03 على عمليات الإيداع هذه.
الميزات الجديدة
PagingDataPresenter
هو الآن صف علني. يمكن الآن إنشاء أدوات العرض المتوافقة مع منصات متعددة استنادًا إلىPagingDataPresenter
بدلاً من الحاجة إلى واجهات برمجة تطبيقات داخلية خاصة بالتقسيم إلى صفحات أوpaging-runtime
AsyncPagingDataDiffer
. (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 تم تحقيق ذلك من خلال طريقتَي الإضافة الجديدتَينLazyPagingItems
itemKey
وitemContentType
على مستوى أدنى، ما يساعدك في تنفيذ المَعلمتَينkey
وcontentType
في واجهات برمجة التطبيقات العاديةitems
المتوفّرة حاليًا فيLazyColumn
وLazyVerticalGrid
، بالإضافة إلى ما يعادلهما في واجهات برمجة التطبيقات، مثلHorizontalPager
. - تم إيقاف
items(lazyPagingItems)
وitemsIndexed(lazyPagingItems)
اللذين يتوافقان معLazyListScope
فقط.
- إتاحة معاينة قائمة بالبيانات الوهمية من خلال إنشاء
- عنصر
paging-testing
جديد يوفّر واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من تطبيقك ودمجها مع مكتبة Paging بشكل منفصل. على سبيل المثال، يشمل ذلك- فئة
TestPager
التي تتيح لك التحقّق من صحة سلوك عملية تنفيذPagingSource
المخصّصة بشكل مستقل عن Pager وواجهة المستخدم الحقيقية. - واجهات برمجة التطبيقات
asPagingSourceFactory
لتحويلFlow<List<Value>>
أوList<Value>
ثابت إلىPagingSourceFactory
يمكن تمريره إلى أداة عرض الصفحات في الاختبارات asSnapshot
إضافة Kotlin علىFlow<PagingData<Value>>
، ما يؤدي إلى ترجمةFlow<PagingData<Value>>
إلىList<Value>
مباشرةً تتيح لك السمةasSnapshot lambda
محاكاة واجهة المستخدم لتطبيقك من خلال واجهات برمجة التطبيقات، مثلscrollTo
أوappendScrollWhile
، حتى تتمكّن من التحقّق من صحة لقطة البيانات في أي وقت في مجموعة البيانات المقسّمة إلى صفحات.
- فئة
- تمت إضافة سجلّات تلقائية لعرض معلومات تصحيح أخطاء التقسيم على مستويَين:
VERBOSE
وDEBUG
. يمكن تفعيل السجلات باستخدام الأمرadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ينطبق ذلك على كلّ من "تقسيم المحتوى إلى صفحات باستخدام طرق العرض" أو "تقسيم المحتوى إلى صفحات باستخدام Compose". - تمت إضافة أدوات إنشاء للفئتين
PagingDataAdapter
وAsyncPagingDataDiffer
تقبلCoroutineContext
بدلاً منCoroutineDispatcher
. - تمت إضافة واجهة
PagingSourceFactory
وظيفية جديدة توفّر مساحة واجهة برمجة تطبيقات أكثر وضوحًا من تعبيرات lambda السابقة () ->PagingSource
. يمكن استخدام هذا المصنع لإنشاء مثيل من Pager.
الإصدار 3.2.0-rc01
21 حزيران (يونيو) 2023
تم طرح androidx.paging:paging-*:3.2.0-rc01
. يحتوي الإصدار 3.2.0-rc01 على عمليات الإيداع هذه.
المساهمة الخارجية
الإصدار 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
وظيفية جديدة توفّر مساحة واضحة أكثر لواجهة برمجة التطبيقات مقارنةً بتعبيرات() -> PagingSource
lambda الحالية. يمكن استخدام هذا المصنع لإنشاء مثيل منPager
. (I33165 وb/280655188) - تمت إضافة واجهة برمجة تطبيقات جديدة
paging-testing
List<Value>.asPagingSourceFactory()
للحصول علىPagingSourceFactory
يتم تحميله فقط من قائمة بيانات غير قابلة للتغيير. يجب الاستمرار في استخدام الإضافة الحالية علىFlow<List<Value>>
لإجراء الاختبارات باستخدام أجيال متعددة من البيانات الثابتة. (Id34d1، b/280655188)
تغييرات واجهة برمجة التطبيقات
- تم الآن إضافة التعليق التوضيحي
@VisibleForTesting
إلى جميع واجهات برمجة التطبيقات العامة في paging-testing لضمان استخدام هذه الواجهات في الاختبارات فقط. (I7db6e) - لم يعُد
asSnapshot
API يتطلّب إدخالCoroutineScope
. يتم الآن استخدام السياق الموروث من النطاق الرئيسي تلقائيًا. (Id0a78، b/282240990) - تمت إعادة ترتيب مَعلمات الدالة الإنشائية
TestPager
لتتطابق بشكل بديهي مع ترتيب مَعلمات الدالة الإنشائيةPager
الفعلية (I6185a) - تم نقل استخدام نوع lambda
() -> PagingSource<Key, Value>
في اختبارات التصفّح إلى النوعPagingSourceFactory<Key, Value>
. (I4a950، b/280655188)
التغييرات في السلوك
- لم يعُد هناك حاجة إلى أداة الإرسال الرئيسية لتشغيل
asSnapshot
اختبارات التقسيم إلى صفحات. ولن يؤدي ضبطه إلى إجراء أي تغييرات على سلوك الاختبار. (Ie56ea)
الإصدار 3.2.0-alpha05
3 مايو 2023
تم طرح androidx.paging:paging-*:3.2.0-alpha05
. يحتوي الإصدار 3.2.0-alpha05 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تضبط واجهة برمجة التطبيقات Paging Testing API في
asSnapshot
الآن المَعلمةloadOperations
تلقائيًا على تعبير lambda فارغ. يتيح ذلك استدعاءasSnapshot
بدون تمرير أي عمليات تحميل لاسترداد البيانات من عملية إعادة التحميل الأولية. (Ied354، b/277233770)
تحسينات على المستندات
- عدّلنا المستندات حول
asPagingSourceFactory()
لتوضيح أنّها طريقة إضافية فيFlow
تعرض مصنعًا قابلاً لإعادة الاستخدام لإنشاء مثيلاتPagingSource
. (I5ff4f، I705b5) - عدّلنا المستندات حول الدالة الإنشائية
LoadResult.Page
لتوضيح ضرورة إلغاءitemsBefore
وitemsAfter
من أجل إتاحة الانتقال السريع. (Ied354)
المساهمات الخارجية
- نشكر 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.يتم ذلك من خلال إضافة
asSnapshot
Kotlin على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 shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159)
إصلاح الأخطاء
- تم إصلاح خطأ الدالة الإنشائية
PagingDataDiffer
غير المتوفّرة عند استخدامpaging-common:3.2.0-alpha01
مع وقت التشغيلpaging-runtime:3.1.1
أو إصدار أقدم.(b/235256201)
الإصدار 3.2.0-alpha01
1 يونيو 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha01
. يحتوي الإصدار 3.2.0-alpha01 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة أدوات إنشاء للفئتين
PagingDataAdapter
وAsyncPagingDataDiffer
تقبلCoroutineContext
بدلاً منCoroutineDispatcher
. (Idc878) - بشكلٍ تلقائي، لن تؤثر
PagingData.from()
وPagingData.empty()
فيCombinedLoadStates
من جهة مقدّم العرض. تمت إضافة تحميل زائد جديد يسمح بتمريرsourceLoadStates
وremoteLoadStates
إلى أدوات الإنشاء هذه للحفاظ على السلوك الحالي لضبطLoadStates
على أن يكون نهائيًا بالكامل (أيNotLoading(endOfPaginationReached = false)
)، مع إمكانية تضمين الولايات البعيدة أيضًا إذا لزم الأمر. في حال عدم اجتيازLoadStates
، سيتم الاحتفاظ بقيمةCombinedLoadStates
السابقة على جهاز مقدّم العرض عند تلقّي قيمةPagingData
الثابتة. (Ic3ce5، b/205344028)
إصلاح الأخطاء
- يتم الآن تحديد أولوية نتيجة
PagingSource.getRefreshKey()
بشكل صحيح علىinitialKey
في الحالات التي تعرض فيها قيمة فارغة، ولكن تم ضبط قيمة غير فارغة لـinitialKey
. (Ic9542، b/230391606)
المساهمة الخارجية
- تم تعديل واجهة برمجة التطبيقات :compose:ui:ui-test (updateApi) بسبب نقل بيانات test-coroutines-lib (I3366d)
الإصدار 3.1
الإصدار 3.1.1
9 مارس 2022
تم طرح androidx.paging:paging-*:3.1.1
. يحتوي الإصدار 3.1.1 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تمت إزالة أحداث
LoadState.NotLoading
الوسيطة بين الأجيال التي أدرجها.cachedIn()
بشكل غير صحيح. يسهّل هذا التغيير التفاعل مع تغييراتLoadState
من خلال إزالة أحداثLoadState.NotLoading
المكرّرة التي تم إنتاجها بين إعادة محاولة عمليات التحميل الفاشلة، وعند إعادة التحميل أو أثناء الإبطال.
الإصدار 3.1.0
17 نوفمبر 2021
تم طرح androidx.paging:paging-*:3.1.0
. يتضمّن الإصدار 3.1.0 عمليات الدمج هذه.
التغييرات المهمة منذ الإصدار 3.0.0
- لم تعُد واجهتا برمجة التطبيقات
Flow<PagingData>.observable
وFlow<PagingData>.flowable
تجريبيتين - تغييرات السلوك في
LoadState
:- أصبح
endOfPaginationReached
الآنfalse
دائمًا مقابلLoadType.REFRESH
لكل منPagingSource
وRemoteMediator
- تنتظر السمة
LoadStates
من Paging الآن قيمًا صالحة من كلّ منPagingSource
وRemoteMediator
قبل إرسالها إلى أسفل السلسلة. ستبدأ الأجيال الجديدة منPagingData
دائمًا بشكل صحيح بـLoading
لحالة إعادة التحميل بدلاً من إعادة الضبط إلىNotLoading
بشكل غير صحيح في بعض الحالات. - لم يعُد "
.loadStateFlow
" و".addLoadStateListener
" في واجهات برمجة التطبيقات الخاصة بالمقدِّم يرسلان بشكل متكرّرCombinedLoadStates
أولية يتم فيها دائمًا ضبط حالات الوسيط علىnull
- أصبح
- يتم الآن إلغاء عمليات الإنشاء السابقة على الفور عند إبطالها أو إنشاء عمليات جديدة. لم يعُد من الضروري استخدام
.collectLatest
علىFlow<PagingData>
، ولكن لا يزال يُنصح بذلك. - تمت إضافة
PagingSource.LoadResult.Invalid
كنوع إرجاع جديد منPagingSource.load
، ما يؤدي إلى تجاهل مكتبة Paging لأي طلبات تحميل معلّقة أو مستقبلية إلىPagingSource
وإبطالها. تم تصميم نوع العرض هذا للتعامل مع البيانات التي قد تكون غير صالحة أو قديمة والتي يمكن عرضها من قاعدة البيانات أو الشبكة. - تمت إضافة واجهتَي برمجة التطبيقات
.onPagesPresented
و.addOnPagesUpdatedListener
الخاصتَين بالمقدِّمين، واللتين يتم تشغيلهما بشكل متزامن أثناء عرض الصفحات في واجهة المستخدم. يمكن أن تحدث تعديلات على الصفحة في الحالات التالية:- يكتمل التحميل الأوّلي لجيل جديد من PagingData، بغض النظر عمّا إذا كان الجيل الجديد يتضمّن أي تغييرات على العناصر المعروضة. أي: سيؤدي الجيل الجديد الذي يكمل عملية التحميل الأولي بدون أي تحديثات لأنّ القائمة هي نفسها تمامًا إلى تشغيل وظيفة معاودة الاتصال هذه.
- يتم إدراج صفحة، حتى إذا كانت الصفحة المُدرَجة لا تحتوي على أي عناصر جديدة.
- تمت إزالة الصفحة، حتى لو كانت فارغة.
الإصدار 3.1.0-rc01
3 نوفمبر 2021
تم طرح androidx.paging:paging-*:3.1.0-rc01
. يتضمّن الإصدار 3.1.0-rc01 عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة حالة السباق وتسريب الذاكرة في .cachedIn() في الحالات التي أرسلت فيها Paging أحداث تحميل متعدّدة في اتجاه المصدر بينما لم تكن هناك أي مراقبات أو بين وقت تبديل مراقب إلى PagingData جديد. (Ib682e)
الإصدار 3.1.0-beta01
13 أكتوبر 2021
تم طرح androidx.paging:paging-*:3.1.0-beta01
. يحتوي الإصدار 3.1.0-beta01 على عمليات الإيداع هذه.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى تجاهل العديد من عمليات الوصول السريع إلى العناصر عند تحديد prefetchDistance، ما يؤدي إلى توقّف عمليات تحميل الصفحات. تُعدّ هذه المشكلة أكثر حدةً عندما يتم عرض العديد من العناصر في وقت واحد بترتيب يعطي الأولوية للتحميل مقارنةً باتجاه التمرير الذي يختاره المستخدم. يتم الآن تخزين عمليات الوصول إلى هذه العناصر مؤقتًا وتحديد أولويتها بشكل متزامن لمنع إسقاطها. (aosp/1833273)
الإصدار 3.1.0-alpha04
29 سبتمبر 2021
تم طرح androidx.paging:paging-*:3.1.0-alpha04
. يحتوي الإصدار 3.1.0-alpha04 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- لم تعُد واجهتا برمجة التطبيقات
Flow<PagingData>.observable
وFlow<PagingData>.flowable
تجريبيتين. (Ie0bdd)
إصلاح الأخطاء
- بالنسبة إلى LoadStates، تكون قيمة
endOfPaginationReached
الآنfalse
دائمًا بالنسبة إلىLoadType.REFRESH
. في السابق، كان من الممكن أن تكون قيمة endOfPaginationReached هيtrue
بالنسبة إلى 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 shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
إصلاح الأخطاء
- تم إصلاح خطأ عدم توفّر الدالة الإنشائية
PagingDataDiffer
عند استخدامpaging-compose:1.0.0-alpha15
معpaging-common:3.1.1
أو إصدار أقدم.(b/235256201،b/239868768)
الإصدار 1.0.0-alpha15
1 يونيو 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha15
. يحتوي الإصدار 1.0.0-alpha15 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة أدوات إنشاء للفئتين
PagingDataAdapter
وAsyncPagingDataDiffer
تقبلCoroutineContext
بدلاً منCoroutineDispatcher
. (Idc878)
إصلاح الأخطاء
- يضبط
LazyPagingItems
الآن قيمةloadState
الأولية علىLoadState.Loading
. (I55043، b/224855902)
الإصدار 1.0.0-alpha14
13 أكتوبر 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha14
. يحتوي الإصدار 1.0.0-alpha14 على عمليات الإيداع التالية.
الإصدار 1.0.0-alpha13
29 سبتمبر 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha13
. يحتوي الإصدار 1.0.0-alpha13 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- تم استبدال الدالة
LazyPagingItems.snapshot()
بالسمةLazyPagingItems.itemSnapshotList
(Ie2da8) - تمت إزالة
LazyPagingItems.getAsState()
المتوقّفة نهائيًا (Ie65e4)
الإصدار 1.0.0-alpha12
21 تموز (يوليو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha12
. يحتوي الإصدار 1.0.0-alpha12 على عمليات الإيداع هذه.
تغييرات واجهة برمجة التطبيقات
- إنّ
items(lazyPagingItems)
وitemsIndexed(lazyPagingItems)
اللذين كانا يُستخدمان لربط ميزة "التقسيم إلى صفحات" بـLazyColumn/Row
يقبلان الآن مَعلمة مفتاح الخيار التي تتيح لك تحديد مفتاح ثابت يمثّل العنصر. يمكنك الاطّلاع على مزيد من المعلومات حول المفاتيح هنا. (I7986d) - تم إيقاف الدالة
lazyPagingItems.getAsState(index)
نهائيًا. يمكنك استخدامlazyPagingItems[index]
كبديل. (I086cb، b/187339372)
الإصدار 1.0.0-alpha11
30 حزيران (يونيو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha11
. يحتوي الإصدار 1.0.0-alpha11 على عمليات الإيداع هذه.
الإصدار 1.0.0-alpha10
2 حزيران (يونيو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha10
. يحتوي الإصدار 1.0.0-alpha10 على عمليات الإيداع هذه.
الإصدار 1.0.0-alpha09
18 أيار (مايو) 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha09
. يحتوي الإصدار 1.0.0-alpha09 على عمليات الإيداع هذه.
إصلاح الأخطاء
- أصبح بإمكانك الآن مراقبة itemCount و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()
إلىLazyPagingItem
s التي تعرض الوظيفة نفسها المتوفّرة في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