ترقيم الصفحات
يسرد هذا الجدول جميع العناصر في مجموعة androidx.paging
.
العناصر | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار التجريبي الأول |
---|---|---|---|---|
paging-* | 3.3.4 | - | - | - |
paging-compose | 3.3.4 | - | - | - |
الإعلان عن التبعيات
لإضافة تبعية على Paging، يجب إضافة مستودع Google Maven إلى مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف التبعيات للعناصر التي تحتاج إليها في ملف build.gradle
ل
تطبيقك أو وحدتك:
Groovy
dependencies { def paging_version = "3.3.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.3.2" }
Kotlin
dependencies { val paging_version = "3.3.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.3.2") }
للحصول على معلومات عن استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات ktx.
لمزيد من المعلومات عن العناصر الاعتمادية، اطّلِع على مقالة إضافة عناصر الاعتماد الخاصة بالإصدار.
ملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا واجهت مشاكل جديدة أو كان لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة صوتك إلى مشكلة حالية عن طريق النقر على زر النجمة.
اطّلِع على مستندات أداة تتبُّع المشاكل لمزيد من المعلومات.
الإصدار 3.3
الإصدار 3.3.4
13 تشرين الثاني (نوفمبر) 2024
تم إصدار androidx.paging:paging-*:3.3.4
. يحتوي الإصدار 3.3.4 على عمليات الربط هذه.
إصلاح الأخطاء
- لن تؤدي اختبارات وحدات Android التي تستخدِم Paging 3.3 أو الإصدارات الأحدث إلى ظهور خطأ مثل
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 API داخلية أوAsyncPagingDataDiffer
فيpaging-runtime
. - تمت إضافة طريقتَي المساعدة
LoadStates
وCombinedLoadStates
الجديدتَين فيhasError
وisIdle
للتحقّق مما إذا كانت حالةLoadStates
هي "خطأ" أوNotLoading
، على التوالي. تمت أيضًا إضافة طريقة جديدةawaitNotLoading()
Kotlin extension method فيFlow<CombinedLoadStates>
تنتظر إلى أن تستقر عملية التحميل في حالةNotLoading
أو Error. - تُرسِل
PagingData.empty()
الآن حالاتNotLoading
تلقائيًا ما لم يتم تمريرLoadStates
مخصّصة إلى طريقة وضع التصميم. يختلف هذا السلوك عن السلوك الحالي الذي لا يرسلLoadStates
عند إرساله إلىPagingDataAdapter
أو يرسل حالات التحميل عند جمعها على أنّهاLazyPagingItems
. عند جمعها على النحو التاليLazyPagingItems
، ستعرض الآن أيضًا قائمة فارغة فور الإنشاء الأولي.
توافق لغة Kotlin مع أنظمة التشغيل المتعددة
توفّر ميزة "التنقّل في الصفحة" الآن عناصر متوافقة مع 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
بدون أي تغييرات في Paging 3.3.0-beta01. يتضمّن الإصدار 3.3.0-rc01 هذه المراجعات.
الإصدار 3.3.0-beta01
3 نيسان (أبريل) 2024
تم إصدار الإصدار androidx.paging:paging-*:3.3.0-beta01
بدون أي تغييرات ملحوظة. يتضمّن الإصدار 3.3.0-beta01 عمليات الربط هذه.
الإصدار 3.3.0-alpha05
20 مارس 2024
تم إصدار androidx.paging:paging-*:3.3.0-alpha05
. يتضمّن الإصدار 3.3.0-alpha05 عمليات الربط هذه.
تغييرات واجهة برمجة التطبيقات
- يستخدم التنقّل الآن تعليق توضيحي
@MainThread
في AndroidX للرمز البرمجي الشائع. (I78f0d، b/327682438)
الإصدار 3.3.0-alpha04
6 مارس 2024
تم إصدار androidx.paging:paging-*:3.3.0-alpha04
. يتضمّن الإصدار 3.3.0-alpha04 عمليات الربط هذه.
إصلاح الأخطاء
- تم إصلاح أخطاء طفيفة في المستندات متعلقة بإضافة توافق Kotlin مع الأنظمة الأساسية المتعددة. (aosp/2950785)
الإصدار 3.3.0-alpha03
7 شباط (فبراير) 2024
تم إصدار androidx.paging:paging-*:3.3.0-alpha03
. يحتوي الإصدار 3.3.0-alpha03 على هذه المراجعات.
الميزات الجديدة
- أصبحت
PagingDataPresenter
الآن فئة عامة. يمكن الآن إنشاء تطبيقات عارضة على منصات متعددة استنادًا إلىPagingDataPresenter
بدلاً من طلب واجهات برمجة تطبيقات Paging API داخلية أوAsyncPagingDataDiffer
فيpaging-runtime
. (Id1f74، b/315214786) - تمت إضافة طريقتَي مساعدة جديدة
LoadStates
وCombinedLoadStates
للتحقّق مما إذا كانت حالةLoadStates
هي "خطأ" أوNotLoading
. تمت أيضًا إضافة واجهة برمجة تطبيقات جديدة تنتظر القيمةLoadStateFlow
إلى أن تستقر عملية التحميل في الحالةNotLoading
أو حالة الخطأ. (Id6c67)
تغيير السلوك
- تُرسِل
PagingData.empty()
الآن حالاتNotLoading
تلقائيًا ما لم يتم تمريرLoadStates
مخصّصة إلى طريقة وضع التصميم. يختلف هذا السلوك عن السلوك الحالي الذي لا يرسلLoadStates
عند إرساله إلىPagingDataAdapter
أو يرسل حالات التحميل عند جمعها على أنّهاLazyPagingItems
. عند جمعها على النحو التاليLazyPagingItems
، ستعرض الآن أيضًا قائمة فارغة فور الإنشاء الأولي. (I4d11d، b/301833847)
الإصدار 3.3.0-alpha02
20 أيلول (سبتمبر) 2023
تم إصدار androidx.paging:paging-*:3.3.0-alpha02
. يحتوي الإصدار 3.3.0-alpha02 على هذه المراجعات.
توافق لغة Kotlin مع أنظمة التشغيل المتعددة
توفّر ميزة "التنقّل في الصفحة" الآن عناصر متوافقة مع Kotlin Multiplatform، ويعود الفضل في ذلك إلى حد كبير إلى العمل الذي تم نقله من مشروع 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()
لعنصر اختبار الفهرسة عند تمرير مسار تم إنشاؤه باستخدامPagingData.from(List)
لأنّasSnapshot()
لن تتوفّر لديه أي معلومات عن وقت انتهاء التحميل (على عكسPagingData.from(List, LoadStates)
الزائد). لا يعمل هذا الحلّ البديل إلا مع مسارات التحسين التي يمكن إكمالها (مثلflowOf(PagingData.from(...))
). بالنسبة إلى مسارات التحسين التي لا يمكن إكمالها (مثلMutableStateFlow
، استخدِم طريقة التحميل الزائدPagingData.from
التي توفّرLoadStates
). (I502c3) - يستخدم الإجراء "إنشاء صفحات" الآن
AndroidUiDispatcher.Main
داخليًا لضمان توفّر البيانات الجديدة في الإطار نفسه عند اكتمال التحميل. (Ia55af)
الإصدار 3.2.0
26 تموز (يوليو) 2023
تم إصدار androidx.paging:paging-*:3.2.0
. يحتوي الإصدار 3.2.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 3.1.0
- حقّقت ميزة "إنشاء صفحات" استقرارًا في واجهة برمجة التطبيقات وتم دمجها مرة أخرى في بقية ميزات "التنقّل في الصفحة" حيث يتطابق إصدارها الآن مع جميع العناصر الأخرى لميزات "التنقّل في الصفحة". تشمل التغييرات منذ الإصدار 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
يمكن تمريره إلى Pager في الاختبارات asSnapshot
إضافة Kotlin فيFlow<PagingData<Value>>
، والتي تُحوّلFlow<PagingData<Value>>
إلىList<Value>
مباشر يتيح لكasSnapshot lambda
محاكاة واجهة مستخدم تطبيقك من خلال واجهات برمجة التطبيقات، مثلscrollTo
أوappendScrollWhile
، حتى تتمكّن من التحقّق من صحة لقطة البيانات في أيّ وقت في مجموعة البيانات التي يتم تقسيمها إلى صفحات.
- فئة
- تمت إضافة سجلّات تلقائية لعرض معلومات تصحيح أخطاء "التنقّل بين صفحات التطبيق" في مستويَين:
VERBOSE
وDEBUG
. يمكن تفعيل السجلات من خلال الأمرadb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. وينطبق ذلك على كلٍّ من "التنقّل بين الصفحات باستخدام طريقة العرض" أو "التنقّل بين الصفحات باستخدام ميزة "الإنشاء". - تمت إضافة عنصرَي إنشاء لـ
PagingDataAdapter
وAsyncPagingDataDiffer
يقبلانCoroutineContext
بدلاً منCoroutineDispatcher
. - تمت إضافة واجهة وظيفية جديدة من النوع
PagingSourceFactory
توفّر مساحة عرض لواجهة برمجة التطبيقات أكثر وضوحًا من دالات lambda السابقة () ->PagingSource
. يمكن استخدام هذا المصنع لإنشاء مثيل لوحدة التنقّل.
الإصدار 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 على هذه المراجعات.
إنشاء الصفحات
- أصبحت ميزة "إنشاء صفحات" مستقرة رسميًا من حيث واجهة برمجة التطبيقات. ونتيجةً لذلك، تم تعديل الإصدار من
1.0.0-alpha20
ليطابق الآن إصدار جميع عناصر الفهرسة الأخرى.
تغييرات واجهة برمجة التطبيقات
- تمت إزالة واجهات برمجة التطبيقات
items(LazyPagingItems)
وitemsIndexed(LazyPagingItems)
المتوقّفة نهائيًا من ميزة "إنشاء صفحات". اطّلِع على ملاحظات إصدار 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
لضمان عدم استخدام هذه الواجهات إلا في الاختبارات. (I7db6e) - لم تعُد واجهة برمجة التطبيقات
asSnapshot
تتطلّب إدخالCoroutineScope
. ويتم الآن استخدام السياق المُكتسَب من النطاق الرئيسي بشكل تلقائي. (Id0a78، b/282240990) - إعادة ترتيب مَعلمات
TestPager
لإنشاء العناصر لتتطابق بشكلٍ بديهي مع ترتيب مَعلماتPager
لإنشاء العناصر الفعلية (I6185a) - استخدام اختبار الفهرسة المُنقل من نوع lambda
() -> PagingSource<Key, Value>
إلى النوعPagingSourceFactory<Key, Value>
(I4a950، b/280655188)
التغييرات في السلوك
- لم يعُد من المطلوب أن يُجري المُشغِّل الرئيسي اختبارات
asSnapshot
للفهرسة. ولم يعُد ضبطه يؤدي إلى إجراء أي تغييرات على سلوك الاختبار. (Ie56ea)
الإصدار 3.2.0-alpha05
3 أيار (مايو) 2023
تم إصدار androidx.paging:paging-*:3.2.0-alpha05
. يحتوي الإصدار 3.2.0-alpha05 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- أصبحت واجهة برمجة التطبيقات Paging Testing API في
asSnapshot
تضبط مَعلمةloadOperations
تلقائيًا على دالة lambda فارغة. يتيح ذلك استدعاءasSnapshot
بدون إدخال أي عمليات تحميل لاسترداد البيانات من عملية التحميل الأولية لإعادة التحديث. (Ied354، b/277233770)
تحسينات على المستندات
- عدّلنا المستندات حول
asPagingSourceFactory()
لتوضيح أنّها طريقة إضافة فيFlow
تُعيد إنشاء مصنع يمكن إعادة استخدامه لإنشاء نُسخ منPagingSource
. (I5ff4f، I705b5) - تم تعديل المستندات حول
LoadResult.Page
المنشئ لتوضيح الحاجة إلى إلغاءitemsBefore
وitemsAfter
لتفعيل القفزة. (Ied354)
المساهمات الخارجية
- نشكر 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>>
يتم إرساله من "المسار" إنشاء بيانات مُقسّمة حسب الصفحات. يسهّل ذلك اختبارات الفهرسة على عمليات تحويلPagingData
، على سبيل المثال، من خلال إنشاء مصدر بيانات زائف لفهرسة البيانات من خلاله. (I6f230، b/235528239) تم توسيع نطاق عنصر
paging-testing
باستخدام واجهات برمجة تطبيقات جديدة مناسبة للتحقّق من صحة البيانات الواردة فيFlow<PagingData<T>>
. يمكن استخدام ذلك، على سبيل المثال، لتأكيد ناتجFlow<PagingData<T>>
من طبقة ViewModel.ويتم ذلك من خلال إضافة
asSnapshot
Kotlin علىFlow<PagingData<Value>>
، والتي تُحوّلFlow<PagingData<Value>>
إلىList<Value>
مباشر. تسمح لك دالةasSnapshot
lambda بمحاكاة واجهة مستخدم تطبيقك من خلال واجهات برمجة التطبيقات، مثل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)
تغييرات واجهة برمجة التطبيقات
- تم الآن وضع علامة بشكل صحيح على طلبات UI للوصول إلى
getItem
وpeek
فيAsyncPagingDataDiffer
وPagingDataAdapter
على أنّها لا يمكن الاتصال بها إلا في سلسلة المحادثات الرئيسية. (I699b6) - تمت إزالة أحرف البدل من الأنواع العامة التي تستخدمها
TestPager
، ما يسهّل استخدام نتائج هذه الطرق في الرموز البرمجية المكتوبة بلغة Java. (I56c42)
الإصدار 3.2.0-alpha03
24 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.paging:paging-*:3.2.0-alpha03
. يحتوي الإصدار 3.2.0-alpha03 على هذه المراجعات.
اختبار الفهرسة
يحتوي هذا الإصدار على عنصر جديد: paging-testing
. يوفّر هذا العنصر واجهات برمجة تطبيقات مصمّمة حول اختبار الوحدة لكل طبقة من طبقات تطبيقك ودمجها مع Paging بشكل منفصل.
على سبيل المثال، يتضمّن هذا الإصدار الأول فئة TestPager
تتيح لك التحقّق من سلوك تنفيذ PagingSource
المخصّص بشكل مستقل عن Pager
وواجهة المستخدم الحقيقية التي تحتاجها عادةً لمحاكاة عملية دمج "التنقّل في الصفحة" من البداية إلى النهاية.
يجب اعتبار TestPager
مزيّفًا، أي نسخة اختبارية تحاكي التنفيذ الفعلي لـ Pager
مع توفير واجهة برمجة تطبيقات مبسّطة لاختبار PagingSource
. واجهات برمجة التطبيقات هذه هي واجهات برمجة تطبيقات suspend
ويجب تشغيلها ضمن runTest
كما هو موضّح في دليل اختبار عمليات التشغيل المتعدّدة للكائنات في Kotlin على Android.
يمكن العثور على مثال على واجهات برمجة التطبيقات هذه المستخدَمة في اختبارات room-paging
التي تمت إعادة تنظيمها لاستخدام TestPager
.
تغييرات واجهة برمجة التطبيقات
- يتيح هذا الإجراء إجراء تكرار ملائم على مدار
LoadResult.Page.data
حتىLoadResult.Page.iterator()
. يسمح ذلك بشكل غير مباشر باستخدام طريقةflatten
في مكتبة Kotlin العادية عند منحList<LoadResult.Page>
، مثل استخدام السمةpages
منPagingState
التي يتم تمريرها إلى الطريقةPagingSource.getRefreshKey
. (Ie0718)
الإصدار 3.2.0-alpha02
10 آب (أغسطس) 2022
تم إصدار androidx.paging:paging-*:3.2.0-alpha02
. يحتوي الإصدار 3.2.0-alpha02 على هذه المراجعات.
الميزات الجديدة
- توفّر ميزة الفهرسة الآن السجلات من خلال فئة
AsyncPagingDataDiffer
أوPagingDataAdapter
لعرض معلومات تصحيح الأخطاء التي تم جمعها منPagingData
. - يمكن تفعيل السجلات من خلال الأمر
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE].
(b/235527159).
إصلاح الأخطاء
- تم إصلاح خطأ عدم توفّر
PagingDataDiffer
عند استخدامpaging-common:3.2.0-alpha01
مع وقت التشغيلpaging-runtime:3.1.1
أو إصدار أقدم.(b/235256201)
الإصدار 3.2.0-alpha01
1 حزيران (يونيو) 2022
تم إصدار androidx.paging:paging-*:3.2.0-alpha01
. يحتوي الإصدار 3.2.0-alpha01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة عنصرَي إنشاء لـ
PagingDataAdapter
وAsyncPagingDataDiffer
يقبلانCoroutineContext
بدلاً منCoroutineDispatcher
. (Idc878) - لن تؤثر
PagingData.from()
وPagingData.empty()
تلقائيًا فيCombinedLoadStates
من جانب المُقدِّم. تمت إضافة طريقة تحميل زائدة جديدة تسمح بتمريرsourceLoadStates
وremoteLoadStates
إلى وظيفتَي الإنشاء هذه للحفاظ على السلوك الحالي لضبطLoadStates
ليكون نهائيًا بالكامل (أيNotLoading(endOfPaginationReached = false)
)، مع خيار تضمين الولايات البعيدة أيضًا إذا لزم الأمر. في حال عدم تمريرLoadStates
، سيتم الاحتفاظ بالقيمة السابقةCombinedLoadStates
من جانب المُقدّم عند تلقّي القيمة الثابتةPagingData
. (Ic3ce5، b/205344028)
إصلاح الأخطاء
- يتم الآن منح الأولوية بشكل صحيح لنتيجة
PagingSource.getRefreshKey()
علىinitialKey
في الحالات التي كانت ستؤدي فيها إلى عرض قيمة فارغة، ولكن تم ضبطinitialKey
غير فارغ. (Ic9542، b/230391606)
المساهمة الخارجية
- تم تعديل واجهة برمجة التطبيقات :compose:ui:ui-test api (updateApi) بسبب نقل test-coroutines-lib (I3366d)
الإصدار 3.1
الإصدار 3.1.1
9 آذار (مارس) 2022
تم إصدار androidx.paging:paging-*:3.1.1
. يحتوي الإصدار 3.1.1 على هذه المراجعات.
إصلاح الأخطاء
- تمّت إزالة أحداث
LoadState.NotLoading
الوسيطة بين الأجيال التي تمّ إدراجها بشكلٍ غير صحيح بواسطة.cachedIn()
. يسهّل هذا التغيير التفاعل مع تغييراتLoadState
عن طريق إزالة أحداثLoadState.NotLoading
المتكرّرة التي تم إنشاؤها بين عمليات إعادة تحميل الفاشلة أو عند التحديث أو أثناء إلغاء الصلاحية.
الإصدار 3.1.0
17 تشرين الثاني (نوفمبر) 2021
تم إصدار androidx.paging:paging-*:3.1.0
. يحتوي الإصدار 3.1.0 على هذه المراجعات.
التغييرات المهمة منذ الإصدار 3.0.0
- لم تعُد واجهات برمجة التطبيقات
Flow<PagingData>.observable
وFlow<PagingData>.flowable
تجريبية. - تغيُّر السلوك إلى
LoadState
:-
endOfPaginationReached
هي الآن دائمًاfalse
مقابلLoadType.REFRESH
لكل منPagingSource
وRemoteMediator
- ينتظر
LoadStates
من 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
. في السابق، كان من الممكن أن يكون endOfPaginationReachedtrue
لـ RemoteMediatorREFRESH
، ولكن ليس لـ PagingSource. تم دمج هذا السلوك الآن لعرضfalse
دائمًا، لأنّه لا معنى أبدًا لأن يكون الإجراء REFRESH نهائيًا، وهو الآن مستندًا كجزء من عقد واجهة برمجة التطبيقات في LoadStates. عند تحديد ما إذا كان ينبغي إنهاء تقسيم الصفحات، يجب دائمًا إجراء ذلك وفقًا لاتجاهات إما APPEND أو PREPEND. (I047b6) تنتظر LoadStates من Paging الآن قيمًا صالحة من كلٍّ من PagingSource وRemoteMediator قبل بث البيانات إلى قنوات الإصدار اللاحق بين عمليات الإنشاء. يمنع ذلك الأجيال الجديدة من PagingData من إرسال "NotLoading" في CombinedLoadStates.source.refresh إذا كان قد تم تحميله من قبل. ستبدأ الأجيال الجديدة من 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 ثالث LoadResult.Invalid إلى PagingSource. عندما يعرض PagingSource.load قيمة LoadResult.Invalid، ستتجاهل ميزة الفهرسة البيانات المحمَّلة و ستبطل PagingSource. تم تصميم نوع الإرجاع هذا لمعالجة البيانات التي يُحتمل أن تكون غير صالحة أو قديمة والتي يمكن إرجاعها من قاعدة البيانات أو الشبكة.
على سبيل المثال، إذا تمّت الكتابة في قاعدة البيانات الأساسية ولكن لم يتمّ إبطال PagingSource في الوقت المناسب، قد يعرض نتائج غير متّسقة إذا كان تنفيذه يعتمد على عدم قابلية تغيير مجموعة البيانات الأساسية التي يتمّ تحميلها منها (مثل تنفيذات قاعدة بيانات بنمط LIMIT OFFSET). في هذا السيناريو، يُنصح بالتحقق من عدم صلاحية البيانات بعد التحميل ومحاولة عرض LoadResult.Invalid، ما يؤدي إلى تجاهل Paging لأي طلبات تحميل في انتظار المراجعة أو المستقبلية إلى PagingSource هذا ومحاولة إبطالها.
يتوافق نوع الإرجاع هذا أيضًا مع Paging2 API التي تستخدِم 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 كانا فاقدي الصلاحية من قبل. يحلّ هذا الإجراء مشكلة تعارض المهام التي أدّت إلى إسقاط Paging لإشارة البطلَان وتوقّفها عند تقديم مصدر كان غير صالح أثناء التحميل الأوّلي. بالإضافة إلى ذلك، تتم الآن إزالة طلبات إعادة التحميل بشكل صحيح بعد تشغيلها، لأنّه مضمّن أن يتمّ استدعاؤها مرة واحدة بحدّ أقصى. (I27e69)
- إرسال القيمة الأولية للعنصر النائب (InitialPagedList) من بث PagedList تم إنشاؤه حديثًا، على سبيل المثال: لن تُمحِي فئة LivePagedListBuilder أو RxPagedListBuilder البيانات التي تم تحميلها سابقًا.
الإصدار 3.1.0-alpha02
1 تموز (يوليو) 2021
تم إصدار androidx.paging:paging-*:3.1.0-alpha02
. يحتوي الإصدار 3.1.0-alpha02 على هذه المراجعات.
الميزات الجديدة
تمت إضافة واجهات برمجة التطبيقات onPagesPresented listener وflow presenter API التي يتم تفعيلها مباشرةً بعد تعديل الصفحات المعروضة في واجهة المستخدم.
بما أنّ هذه التعديلات متزامنة مع واجهة المستخدم، يمكنك استدعاء طرق المُحوِّل مثل .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 أحيانًا إلى RecyclerView أحداث اختلاف بدون إجراء ، ما قد يؤدي إلى بدء بعض المستمعين مبكرًا. (Ic507f، b/182510751)
المساهمة الخارجية
- تمت إضافة واجهات برمجة تطبيقات متوافقة مع PagedList المتوقّفة نهائيًا إلى العنصر rxjava3 (Id1ce2، b/182497591)
الإصدار 1.0.0 من ميزة "إنشاء صفحات"
الإصدار 1.0.0-alpha20
24 أيار (مايو) 2023
تم إصدار androidx.paging:paging-compose:1.0.0-alpha20
. يحتوي الإصدار 1.0.0-alpha20 على هذه المراجعات.
الميزات الجديدة
- تتيح ميزة "إنشاء صفحات" الآن معاينة قائمة بالبيانات المزيّفة من خلال إنشاء
PagingData.from(fakeData)
ولفّ هذاPagingData
فيMutableStateFlow
(على سبيل المثال،MutableStateFlow(PagingData.from(listOf(1, 2, 3)))
). باستخدام هذه البيانات كمدخلات في@Preview
، ستوفّر المكالمات إلىcollectAsLazyPagingItems()
LazyPagingItems
قابلة للمعاينة. (I8a78d، b/194544557)
إصلاح الأخطاء
- ستتوفّر الآن البيانات المخزّنة مؤقتًا من
pager.flow.cachedIn
والتي تم جمعها فيLazyPagingItems
على الفور بعد استعادة الحالة بدون الحاجة إلى جمع غير متزامن. وهذا يعني أنّ البيانات المخزّنة مؤقتًا ستكون جاهزة للعرض فورًا بعد إنشاء المحتوى الأولي بعد استعادة الحالة. (I97a60، b/177245496)
الإصدار 1.0.0-alpha19
3 أيار (مايو) 2023
تم إصدار androidx.paging:paging-compose:1.0.0-alpha19
. يحتوي الإصدار 1.0.0-alpha19 على هذه المراجعات.
إتاحة جميع التنسيقات المتغيّرة
في السابق، كان 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
أطول ببضع سطور، رأينا أنّ الاتساق في جميع التنسيقات المُهمّلة هو عامل مهم لأولئك الذين يستخدمون ميزة "إنشاء صفحات" من الآن فصاعدًا. لهذا السبب، تمّ إيقاف الإضافات الحالية لـ LazyListScope
نهائيًا. (I0c459 وI92c8f وb/276989796)
تغييرات واجهة برمجة التطبيقات
- لتسهيل نقل البيانات إلى واجهات برمجة التطبيقات الجديدة، تتيح الآن وظيفتا التوسيع
items
وitemsIndexed
فيLazyListScope
استخدام المَعلمةcontentType
، ما يعكس مدى توفّر هذه الوظيفة في واجهات برمجة التطبيقات الجديدة. (Ib1918، b/255283378)
تعديلات على التبعيات
- تم تعديل التبعيات في Paging Compose من Compose 1.0.5 إلى Compose 1.2.1. (Ib1918، b/255283378)
الإصدار 1.0.0-alpha18
8 شباط (فبراير) 2023
تم طرح الإصدار androidx.paging:paging-compose:1.0.0-alpha18
بدون أي تغييرات. يحتوي الإصدار 1.0.0-alpha18 على هذه المراجعات.
الإصدار 1.0.0-alpha17
24 تشرين الأول (أكتوبر) 2022
تم إصدار androidx.paging:paging-compose:1.0.0-alpha17
. يحتوي الإصدار 1.0.0-alpha17 على هذه المراجعات.
الميزات الجديدة
- إتاحة استخدام
CoroutineContext
مخصّص عند الاتصال بـcollectLazyPagingItems
(I7a574، b/243182795، b/233783862)
الإصدار 1.0.0-alpha16
10 آب (أغسطس) 2022
تم إصدار androidx.paging:paging-compose:1.0.0-alpha16
. يحتوي الإصدار 1.0.0-alpha16 على هذه المراجعات.
الميزات الجديدة
- توفّر ميزة "الفهرسة" الآن السجلات من خلال فئة
LazyPagingItems
لعرض معلومات تصحيح الأخطاء التي تم جمعها من PagingData. - يمكن تفعيل السجلات من خلال الأمر
adb shell
adb shell setprop log.tag.Paging [DEBUG|VERBOSE]
. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
إصلاح الأخطاء
- تم إصلاح خطأ عدم توفّر
PagingDataDiffer
عند استخدامpaging-compose:1.0.0-alpha15
معpaging-common:3.1.1
أو إصدار أقدم.(b/235256201،b/239868768)
الإصدار 1.0.0-alpha15
1 حزيران (يونيو) 2022
تم إصدار androidx.paging:paging-compose:1.0.0-alpha15
. يحتوي الإصدار 1.0.0-alpha15 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة عنصرَي إنشاء لـ
PagingDataAdapter
وAsyncPagingDataDiffer
يقبلانCoroutineContext
بدلاً منCoroutineDispatcher
. (Idc878)
إصلاح الأخطاء
- يضبط
LazyPagingItems
الآنloadState
الأولي ليكون لديه إعادة تحميلLoadState.Loading
. (I55043، b/224855902)
الإصدار 1.0.0-alpha14
13 تشرين الأول (أكتوبر) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha14
. يحتوي الإصدار 1.0.0-alpha14 على هذه المراجعات.
الإصدار 1.0.0-alpha13
29 أيلول (سبتمبر) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha13
. يحتوي الإصدار 1.0.0-alpha13 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تم استبدال الدالة
LazyPagingItems.snapshot()
بموقعLazyPagingItems.itemSnapshotList
(Ie2da8). - تمّت إزالة العنصر
LazyPagingItems.getAsState()
الذي تمّ إيقافه نهائيًا (Ie65e4)
الإصدار 1.0.0-alpha12
21 تموز (يوليو) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha12
. يحتوي الإصدار 1.0.0-alpha12 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
items(lazyPagingItems)
وitemsIndexed(lazyPagingItems)
اللذان كانا يُستخدَمان لربط Paging بـLazyColumn/Row
يقبلان الآن مَعلمة مفتاح الخيار التي تتيح لك تحديد مفتاح ثابت يمثّل العنصر. يمكنك الاطّلاع على مزيد من المعلومات حول المفاتيح هنا. (I7986d)- تم إيقاف الدالة
lazyPagingItems.getAsState(index)
نهائيًا. استخدِمlazyPagingItems[index]
بدلاً من ذلك. (I086cb، b/187339372)
الإصدار 1.0.0-alpha11
30 حزيران (يونيو) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha11
. يحتوي الإصدار 1.0.0-alpha11 على هذه المراجعات.
الإصدار 1.0.0-alpha10
2 حزيران (يونيو) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha10
. يحتوي الإصدار 1.0.0-alpha10 على هذه المراجعات.
الإصدار 1.0.0-alpha09
18 أيار (مايو) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha09
. يحتوي الإصدار 1.0.0-alpha09 على هذه المراجعات.
إصلاح الأخطاء
- يمكن الآن مراقبة itemCount وitem getter في LazyPagingItems، ما يتيح استخدامها مع LazyVerticalGrid أيضًا (Ie2446 وb/171872064 وb/168285687).
توافق تطبيق Compose
- لا يتوافق
androidx.paging:paging-compose:1.0.0-alpha09
إلا مع الإصدار1.0.0-beta07
من تطبيق "الإنشاء" والإصدارات الأحدث.
الإصدار 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 على هذه المراجعات.
إصلاح الأخطاء
تم تعديلها لتصبح معتمدة على Compose 1.0.0-alpha11.
الإصدار 1.0.0-alpha05
13 كانون الثاني (يناير) 2021
تم إصدار androidx.paging:paging-compose:1.0.0-alpha05
. يحتوي الإصدار 1.0.0-alpha05 على هذه المراجعات.
تم تعديلها لتصبح معتمدة على Compose 1.0.0-alpha10.
الإصدار 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
التي تعرض الوظيفة نفسها المتاحة في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
عملية دمج بين مكتبة التنقّل بين الصفحات وJetpack Compose. مثال بسيط على الاستخدام:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
الإصدار 3.0.1
الإصدار 3.0.1
21 تموز (يوليو) 2021
تم إصدار androidx.paging:paging-*:3.0.1
. يحتوي الإصدار 3.0.1 على هذه المراجعات.
إصلاح الأخطاء
- لن يؤدي الوصول إلى
PagedList.dataSource
من القيمة الأولية التي تم إنشاؤها بواسطةLivePagedList
أوRxPagedList
إلى طرح استثناء IllegalStateException (I96707) بشكل غير صحيح.
الإصدار 3.0.0
الإصدار 3.0.0
5 أيار (مايو) 2021
تم إصدار androidx.paging:paging-*:3.0.0
. يحتوي الإصدار 3.0.0 على هذه المراجعات.
الميزات الرئيسية في الإصدار 3.0.0
تم إيقاف معظم واجهات برمجة التطبيقات الحالية من Paging 2.x.x نهائيًا لصالح واجهات برمجة تطبيقات Paging 3 الجديدة لتقديم التحسينات التالية:
- دعم من الدرجة الأولى لعمليات Kotlin المتزامنة وFlow
- الدعم في ما يتعلق بالإلغاء
- إشارات الخطأ وحالة التحميل المضمّنة
- إعادة المحاولة وإعادة التحميل
- تم دمج جميع الفئات الفرعية الثلاثة من DataSource في فئة PagingSource موحّدة.
- عمليات تحويل الصفحات المخصّصة، بما في ذلك عملية مدمجة لإضافة فواصل
- تحميل رؤوس وتذييلات الولاية
الإصدار 3.0.0-rc01
21 نيسان (أبريل) 2021
تم إصدار androidx.paging:paging-*:3.0.0-rc01
. يحتوي الإصدار 3.0.0-rc01 على هذه المراجعات.
إصلاح الأخطاء
- تم إصلاح مشكلة كانت تؤدي إلى إرسال Paging أحيانًا إلى RecyclerView أحداث اختلاف بدون إجراء ، ما قد يؤدي إلى بدء بعض المستمعين مبكرًا. (Ic507f، b/182510751)
الإصدار 3.0.0-beta03
24 آذار (مارس) 2021
تم إصدار androidx.paging:paging-*:3.0.0-beta03
. يحتوي الإصدار 3.0.0-beta03 على هذه المراجعات.
إصلاح الأخطاء
- لقد عدّلنا طريقة التعامل مع العناصر النائبة عند تتمة تحميل القائمة لمنع القفزات غير المتوقّعة في RecyclerView. راجِع NullPaddedDiffing.md لمعرفة التفاصيل. (If1490 وb/170027529 وb/177338149)
- لم تعُد أدوات إنشاء PagedList المختلفة (مسار التوافق القديم) تستدعي
DataSource.Factory.create()
بشكل غير متزامن على الخيط الرئيسي عند استدعاء.build()
. (b/182798948)
الإصدار 3.0.0-beta02
10 آذار (مارس) 2021
تم إصدار androidx.paging:paging-*:3.0.0-beta02
. يحتوي الإصدار 3.0.0-beta02 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- يتم الآن نشر إضافات Rx3 بشكل صحيح
@ExperimentalCoroutinesApi
شرط الموافقة في السابق، كانت هذه المراجعات مُشار إليها في طريقة@get
التي يتجاهلها "مُجمِّع لغة Kotlin" بسبب السبب التالي: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
إصلاح الأخطاء
- فرض قيود على الاستخدام العلني لواجهات برمجة التطبيقات التجريبية (I6aa29 وb/174531520)
- تم إصلاح خلل كان يتسبب في ضبط
PagingState
علىnull
دائمًا عند طلب التحديث عن بُعد. - تم إصلاح خطأ كان يؤدي إلى أن تمنع الصفحات الفارغة التي يعرضها PagingSource ميزة Paging من جلبها مرة أخرى لاستيفاء
prefetchDistance
، ما يؤدي إلى "توقّف" Paging.
الإصدار 3.0.0-beta01
10 شباط (فبراير) 2021
تم إصدار androidx.paging:paging-*:3.0.0-beta01
. يحتوي الإصدار 3.0.0-beta01 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تعرض الآن حِزم Rx2 وRx3 التعليق التوضيحي التجريبي الذي تعتمد عليه. إذا كنت تستخدم حِزم Rx compat في paging-rxjava2 أو
paging-rxjava3، عليك الآن إضافة تعليقات توضيحية إلى عمليات الاستخدام باستخدام
@OptIn(ExperimentalCoroutinesApi::class)
(Ib1f9d).
إصلاح الأخطاء
- تم إصلاح الخطأ
IndexOutOfBoundsException: Inconsistency detected
الذي كان يظهر أحيانًا عند استخدام واجهات برمجة تطبيقات الإصدار 2 منDataSource
من خلال مسارات التوافق - تم الآن إطلاق
isInvalid
بشكل صحيح على fetchDispatcher بدلاً من الخيط الرئيسي عند استدعاءDataSource
أثناء إعدادDataSource
عند استخدامه عبر مسارات التوافق. يعالج هذا الخطأIllegalStateException
بسبب الوصول إلى قاعدة البيانات في سلسلة المحادثات الرئيسية عند استخدام عملية تنفيذPagingSource
في Room.
الإصدار 3.0.0-alpha13
27 كانون الثاني (يناير) 2021
تم إصدار androidx.paging:paging-*:3.0.0-alpha13
. يحتوي الإصدار 3.0.0-alpha13 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- لم تعُد دالة
PagingSource.getRefreshKey
اختيارية لتنفيذها، بل أصبحت الآن دالة مجردة بدون تنفيذ تلقائي. يمكن للمستخدمين الذين ينتقلون إلى الإصدار الجديد مواصلة عرض التنفيذ التلقائي، الذي يعرض ببساطةnull
، ولكن يجب أن يكونgetRefreshKey()
مزوّدًا بتنفيذ حقيقي يعرض مفتاحًا استنادًا إلى موضع التمرير الحالي للمستخدم، ما يسمح لميزة "التنقّل في الصفحة" بمواصلة التحميل في منتصف مساحة العرض من خلالPagingState.anchorPosition
إذا كان ذلك ممكنًا. (I4339a) - تم الآن منح "
InvalidatingPagingSourceFactory
" دور فئة نهائية (Ia3b0a). - السماح بضبط سلوك فاصل المحطة (العنوان / التذييل)
باستخدام مَعلمة SeparatorType اختيارية إضافية الخياران
هما:
-
FULLY_COMPLETE
- السلوك الحالي: الانتظار إلى أن يُحدِّد كلّ من PagingSource و RemoteMediator أنّه تمّ الوصول إلى endOfPagination قبل إضافة فاصل نهاية في حال عدم استخدام RemoteMediator، يتم تجاهل loadState عن بُعد. يكون هذا مفيدًا في المقام الأول إذا كنت تريد فقط عرض فاصل القسم عند تحميل القسم بالكامل، بما في ذلك الجلب من مصدر بعيد، مثل الشبكة. SOURCE_COMPLETE
- الانتظار فقط إلى أن يضع PagingSource علامة endOfPaginationReached حتى في حال استخدام RemoteMediator يتيح ذلك عرض الرؤوس والتذييلات بشكل متزامن مع عملية التحميل الأولية، ما يمنع المستخدمين من الحاجة إلى التمرير لعرض الفواصل النهائية. (Ibe993، b/174700218)
-
إصلاح الأخطاء
- تم إصلاح تسرُّب ذاكرة نادر يحدث عندما يتم إبطال PagingSource قبل أن يبدأ PageFetcher في التحميل منه. (I9606b، b/174625633)
الإصدار 3.0.0-alpha12
13 كانون الثاني (يناير) 2021
تم إصدار androidx.paging:paging-*:3.0.0-alpha12
. يحتوي الإصدار 3.0.0-alpha12 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- لم تعُد فئة InvalidatingPagingSourceFactory فئة مجردة، لأنّها لم تتضمّن أبدًا أي طرق مجردة. (I4a8c4)
- تمت إضافة طريقة مُحمَّلة زائدة من .cachedIn() التي تقبل ViewModel بدلاً من Lifecycle أو CoroutineScope لمستخدمي Java. (I97d81، b/175332619)
- السماح لمُرسِلي طلبات Java باستخدام عمليات تحويل PagingData بطريقة غير متزامنة، من خلال قبول Executor في مَعلمات عامل التحويل
تمت الآن إزالة اللاحقة -Sync من جميع عوامل تحويل -Sync، وسيحتاج مستخدمو Kotlin Coroutine إلى إزالة الغموض من خلال
استدعاء دالة الإضافة التي تقبل كتلة تعليق بدلاً من ذلك.
تم نقل جميع عوامل تشغيل تحويل PagingData إلى الإضافات
ضمن فئة PagingDataTransforms الثابتة. على مستخدمي Java
استدعاؤها من خلال العناصر المساعدة الثابتة، مثل
PagingDataTransforms.map(pagingData, transform)
بالنسبة إلى مستخدمي Kotlin، يكون أسلوب الإنشاء هو نفسه ولكن عليك استيراد الدالة. (If6885، b/172895919)
إصلاح الأخطاء
- تم إصلاح خطأ كان يؤدي إلى عدم استدعاء
RemoteMediator.load()
أثناءadapter.refresh()
إذا سبق الوصول إلى نهاية تقسيم الصفحات.
الإصدار 3.0.0-alpha11
16 كانون الأول (ديسمبر) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha11
. يحتوي الإصدار 3.0.0-alpha11 على هذه المراجعات.
الميزات الجديدة
- تمت إضافة ميزة "الحالة المحفوظة" لحالات الاستخدام الأساسية التالية (لا يزال العمل جاريًا على توفير الدعم الكامل، خاصةً في حالة المصدر المتعدّد الطبقات):
- يتم تخزين المسار المؤدّي في ذاكرة التخزين المؤقت ولا يتم إغلاق التطبيق (على سبيل المثال، يتم تخزين المسار المؤدّي في ذاكرة التخزين المؤقت في نموذج عرض ويتم إعادة إنشاء النشاط أثناء العملية)
- يتم احتساب مصدر تقسيم الصفحات وتفعيل العناصر النائبة و عدم ترتيب التنسيق بشكل متعرّج.
تغييرات واجهة برمجة التطبيقات
- أصبحت واجهة برمجة التطبيقات
PagingSource.getRefreshKey()
مستقرة الآن (I22f6f، b/173530980). - لم تعُد
PagingSource.invalidate
دالة مفتوحة. إذا كنت تحتاج إلى تلقّي إشعار عند حدوث إلغاء الصلاحية، ننصحك باستدعاء الإجراء registerInvalidatedCallback بدلاً من إلغاء invalidate. (I628d9، b/173029013، b/137971356) - يحتوي Pager الآن على مُنشئ تجريبي واحد إلى جانب المُنشئين العاديين، بدلاً من تسرُّب واجهات برمجة التطبيقات التجريبية إلى واجهة برمجة التطبيقات العامة غير التجريبية من خلال التعليق التوضيحي للموافقة. (I9dc61، b/174531520)
- تم تعديل سمات الراحة،
CombinedLoadStates.refresh
وCombinedLoadStates.prepend
وCombinedLoadStates.append
لإجراء عملية النقل منLoading
إلىNotLoading
فقط بعد أن تصبح حالة تحميل الوسيط والمصدرNotLoading
لضمان تطبيق التعديل عن بُعد. (I65619) تمت إزالة LoadParams.pageSize (سبق أن تم إيقافه نهائيًا). ننصحك باستخدام
LoadParams.loadSize
في PagingSource.يكون
LoadParams.loadSize
دائمًا مساويًا لPagingConfig.pageSize
باستثناء طلب التحميل الأولي حيث يكون مساويًا لPagingConfig.initialLoadSize
.إذا كنت تختبر DataSource في Paging2 بدون استخدام Pager أو PagedList، قد لا يتطابق
pageSize
معPagingConfig.pageSize
إذا كنت أيضًا تضبطinitialLoadSize
. إذا كان ذلك مهمًا لاختباراتك، جرِّب استخدام Pager/PagedList بدلاً من ذلك، ما سيؤدي إلى ضبط PageSize الصحيح داخليًا لطرق تحميل DataSource. (I98ac7، b/149157296)
إصلاح الأخطاء
- تم إصلاح مشكلة تعطُّل بسبب IllegalStateException عند استخدام الفواصل مع ضبط PagingConfig.maxSize. (I0ed33، b/174787528)
- تم إصلاح خطأ كان يؤدي إلى عدم تعديل حالة التحميل لـ PREPEND / APPEND
إلى
NotLoading(endOfPaginationReached = true)
على الفور بعد التحميل الأولي إذا تم ضبط RemoteMediator (I8cf5a). - تم إصلاح خلل كان يؤدي إلى عرض القائمة السابقة (غير المحدّثة) ضمن تعديلات ListUpdateCallback من خلال واجهات برمجة التطبيقات من جهة المُقدّم، مثل .snapshot() و.peek() وما إلى ذلك.
- تم إصلاح خطأ كان يمنع عوامل تشغيل الفواصل من إضافة رؤوس أو تذييلات عند استخدامها مع RemoteMediator.
- تم إصلاح خطأ كان يؤدي إلى توقُّف RemoteMediator في حالة Loading عند تعديل LoadState إلى NotLoading
- تم إصلاح خطأ كان يؤدي إلى أن تؤدي واجهة برمجة التطبيقات
.asPagingSourceFactory()
المتوافقة مع Paging2.0 إلى إعدادDataSource
الاحتياطية في CoroutineDispatcher غير الصحيح. يحلّ هذا الإجراء حالات الأعطال وحالات ANR المحتمَلة، خاصةً عند استخدام الإصدار الحالي من Room لـ PagingSource الذي يستخدم مسار التوافق هذا.
الإصدار 3.0.0-alpha10
2 كانون الأول (ديسمبر) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha10
. يحتوي الإصدار 3.0.0-alpha10 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
تمّت إزالة واجهات برمجة التطبيقات
dataRefreshFlow
وdataRefreshListener
التي تمّ إيقافها نهائيًا، لأنّها متكرّرة مع تحديثات loadStateFlow / Listener. بالنسبة إلى المستخدمين الذين ينقلون بياناتهم، يكون الإجراء المكافئ لـ loadStateFlow هو:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }
إصلاح الأخطاء
- يتم الآن
نشر حدث endOfPaginationReached لـ RemoteMediator
REFRESH
بشكلٍ صحيح إلى تعديلات LoadState ويمنع بدءAPPEND
وPREPEND
عن بُعد. (I94a3f، b/155290248) - لن يؤدي عرض قائمة فارغة بسبب صفحة أولية فارغة أو
الفلترة المكثّفة إلى منع ميزة "الفهرسة" من بدء عمليات تحميل
PREPEND
أوAPPEND
. (I3e702، b/168169730) - تم إصلاح مشكلة عدم استدعاء
getRefreshKey
في الإصدارات اللاحقة من PagingSource عند حدوث عمليات إبطال بشكلٍ سريع. (I45460، b/170027530)
المساهمة الخارجية
- تمت إضافة فئة مجردة جديدة InvalidatingPagingSourceFactory
مع واجهة برمجة تطبيقات
.invalidate()
تعيد توجيه الإبطال إلى جميع PagingSources التي تنشئها. شكرًا @claraf3. (Ie71fc، b/160716447)
المشاكل المعروفة
- قد لا تظهر العناوين والتذييلات من عملية التحويل .insertSeparators() على الفور عند استخدام RemoteMediator b/172254056.
- يمكن أن يؤدي استخدام RemoteMediator إلى تعطُّل
LoadState
عن بُعد في حال اكتمال عملية الإبطال وPagingSource.load(LoadParams.Refresh(...))
قبل أن يعرضRemoteMediator.load()
القيمة b/173717820.
الإصدار 3.0.0-alpha09
11 تشرين الثاني (نوفمبر) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha09
. يحتوي الإصدار 3.0.0-alpha09 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- أوقِف نهائيًا استخدام الطريقتَين dataRefreshFlow / Listener باستخدام عبارة replaceWith. (I6e2dd)
إصلاح الأخطاء
- إصلاح لخطأ
IllegalArgumentException
الذي يتم طرحه عند استخدام الفواصل مع RemoteMediator وبدء عملية إلغاء صلاحية أثناء تحميل عن بُعد قد يؤدي إلى عرض endOfPagination (I3a260)
الإصدار 3.0.0-alpha08
28 تشرين الأول (أكتوبر) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha08
. يحتوي الإصدار 3.0.0-alpha08 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تم دمج الصيغ Kotlin / Java من
DataSource.InvalidatedCallback
من خلال تفعيل عمليات التحويل باستخدام أسلوب SAM في Kotlin من خلال واجهة الوظائف (متوفّرة في Kotlin 1.4). يعالج هذا الإجراء أيضًا خطأً كان يؤدي إلى عدم استدعاء ملف kotlin المتغير من وظائف الاستدعاء التي تؤدي إلى إلغاء القيمة بعد تحويله بواسطة.map
أو.mapByPage
. (I1f244، b/165313046)
إصلاح الأخطاء
- تم تحسين تفاعل Paging مع ViewPager بشكل كبير. وعلى وجه التحديد، لن تلغي ميزة "الفهرسة" مكالمة
RemoteMediator#load
بسبب إلغاء صلاحية الصفحة. ولن يُرسل أيضًا طلب تحميل لإضافة/إدراج البيانات، إذا كان مطلوبًا إجراء إعادة تحميل، إلى أن يكتمل طلب إعادة التحميل بنجاح. (I6390b، b/162252536) - تم تفعيل فحص 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 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تقبل الآن عوامل التشغيل المستندة إلى Guava في Async PagingData 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
يتسبب في إعادة تشغيل عمليات الوصول إلى العناصر بشكل غير صحيح.
المساهمة الخارجية
- نشكر "كلارا ف" على مساعدتها في تحسين بعض الاختبارات. (549612)
الإصدار 3.0.0-alpha04
5 آب (أغسطس) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha04
. يحتوي الإصدار 3.0.0-alpha04 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
peek()
API إلىAsyncPagingDataDiffer
وPagingDataAdapter
للسماح بالوصول إلى البيانات المعروضة بدون بدء عمليات تحميل للصفحات. (I38898، b/159104197) - تمت إضافة واجهة برمجة تطبيقات
snapshot()
إلىPagingDataAdapter
وAsyncPagingDataDiffer
للسماح باسترداد العناصر المعروضة بدون بدء جلب الصفحة. (I566b6، b/159104197) - تمت إضافة
PagingData.from(List<T>)
لإنشاء مثيل للسماح بعرض قوائم ثابتة، والتي يمكن دمجها مع تدفق PagingData العام لعرض قوائم ثابتة في حالات معيّنة، مثل قبل انتهاء عملية REFRESH الأولية أو لاختبار عمليات التحويل ببساطة. (Id134d) - إيقاف واجهتَي برمجة التطبيقات dataRefresh Flow / Listener API نهائيًا لأنّهما كانتا مقصودًا منهما عرض حالة العناصر المعروضة عند REFRESH، ولكن مع التحسينات التي تم إجراؤها على توقيت استدعاء loadState Flow / Listener وproperty itemCount، أصبحتا زائدتين عن الحاجة (Ia19f3)
- تمت إضافة وحدات تغليف متوافقة مع RxJava3 لإصدارَي
PagingSource
وRemoteMediator
(I49ef3 وb/161480176)
إصلاح الأخطاء
PositionalDataSource
تم تحويله إلىPagingSource
من خلالtoPagingSourceFactory
المساعد، بما في ذلكPagingSource
الذي تم إنشاؤه بواسطة Room يضعون الآن علامة بشكل صحيح للسماح بالانتقال. (I3e84c، b/162161201)- تم إصلاح خطأ كان يؤدي فيه استخدام الصيغة المتزامنة من submitData
إلى حدوث تداخل في بعض الأحيان يؤدي إلى حدوث
ClosedSendChannelException
(I4d702، b/160192222).
المساهمة الخارجية
- نشكر "زاك سفيرز" على إضافة وحدات التفاف متوافقة مع RxJava3 بالنيابة عن Slack. (I49ef3، b/161480176)
الإصدار 3.0.0-alpha03
22 تموز (يوليو) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha03
. يحتوي الإصدار 3.0.0-alpha03 على هذه المراجعات.
تغييرات واجهة برمجة التطبيقات
- أصبح المُنشئ لواجهة PagingState متاحًا للجميع الآن، ما من شأنه تسهيل اختبار عمليات تنفيذ getRefreshKey() (I8bf15).
- تم إخفاء صيغ دالة ربط DataSource kotlin من Java، لمحاولة حلّ الغموض بين الصيغ الأصلية وتلك الخاصة بـ kotlin. (If7b23، b/161150011)
- تم وضع علامة @JvmSynthetic (I56ae5) على واجهات برمجة التطبيقات المكرّرة التي تم إنشاؤها لتسهيل استخدام لغة Kotlin.
- تمت إضافة عمليات تحميل زائدة لإنشاء LoadResult.Page التي تضبط itemsBefore وitemsAfter تلقائيًا على COUNT_UNDEFINED (I47849)
- تمّت إتاحة استخدام طرق تعليق opeators PagingData الحالية وتقديم opeators جديدة غير معلّقة mapSync وflatMapSync وfilterSync لمستخدمي Java. تم نقل methods الحالية للتحويل إلى دوال الإضافة حتى يحتاج مستخدمو Kotlin الآن إلى استيرادها. (I34239، b/159983232)
إصلاح الأخطاء
- ستعرض الآن مصادر الفهرسة في 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 في المصنع لمنع إعادة استخدام PagingSources غير الصالحة عن طريق الخطأ، ما أدّى إلى ظهور خطأ غير واضح (I99809، b/158486430)
- لم تعُد حالات تعذُّر إعادة تحميل RemoteMediator تمنع تحميل PagingSource (I38b1b، b/158892717)
- لم يعُد الإصدار غير المعلّق من
submitData
يتسبب في حدوث عطل بسبب عملية جمع متزامنة فيPagingData
متعددة عند استدعائه بعد الإصدار المعلّق منsubmitData
. (I26358، b/158048877) - تم إصلاح استثناء "لا يمكن جمع البيانات مرتين من فهرس الصفحات" الذي قد يحدث بعد تغيير الإعدادات (I58bcc، b/158784811)
الإصدار 3.0.0-alpha01
10 حزيران (يونيو) 2020
تم إصدار androidx.paging:paging-*:3.0.0-alpha01
. يحتوي الإصدار 3.0.0-alpha01 على هذه المراجعات.
تم تحديث "مكتبة الفهرسة" إلى الإصدار 3.0 لتفعيل العديد من الميزات الجديدة الرئيسية.
الميزات الجديدة في الإصدار 3.0
- دعم من الدرجة الأولى لعمليات Kotlin المتزامنة وFlow
- إتاحة التحميل غير المتزامن باستخدام وظائف تعليق عمليات التشغيل المتعدّدة أو عناصر RxJava Single أو Guava ListenableFuture الأساسية
- إشارات الخطأ وحالة التحميل المضمّنة لتصميم واجهة مستجيبة للمستخدم، بما في ذلك وظيفة إعادة المحاولة والتحديث
- تحسينات على طبقة المستودع
- واجهة مصدر بيانات مبسّطة
- تصفح الشبكة وقاعدة البيانات المبسّط
- المساعدة في الإلغاء
- تحسينات على طبقة العرض
المشاكل المعروفة
- لا تتوفّر مستندات javadocs الخاصة بإصدار Paging 3 حتى الآن. في الوقت الحالي، يُرجى استخدام الأدلة المرتبطة أعلاه أو مستندات Kotlin. (b/158614050)
الإصدار 2.1.2
الإصدار 2.1.2
18 آذار (مارس) 2020
تم إصدار androidx.paging:paging:2.1.2
. يحتوي الإصدار 2.1.2 على عمليات الربط هذه مقارنةً بالإصدار 2.1.0.
إصلاح الأخطاء
- حلّ مشكلة
IndexOutOfBoundsException
في حالات نادرة عند تحويل موضع أثناء إلغاء الصلاحية
إصدار المشكلة
تم إصدار الإصدار
2.1.1
من ميزة "التنقّل في الصفحة" بشكل غير صحيح من فرع تم ضبط إعداداته بشكل خاطئ، ما أدّى إلى عرض واجهات برمجة تطبيقات ووظائف تم تنفيذها جزئيًا وسيتم طرحها في إصدار مستقبلي.يتضمّن الإصدار
2.1.2
من ميزة "الفهرسة" الإصلاح الذي تم إصداره في الأصل مع الإصدار 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
إضافةً رئيسيتين، وهما إسقاط الصفحة ومكتبات إضافات KTX لكل عنصر، بالإضافة إلى العديد من التغييرات الأخرى في واجهة برمجة التطبيقات وإصلاحات الأخطاء.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة
PagedList.Config.Builder.setMaxSize()
لتقييد عدد العناصر المحمَّلة في الذاكرة. - تمت إضافة
androidx.paging.Config()
كبديلPagedList.Config.Builder
في Kotlin - تمت إضافة
androidx.paging.PagedList()
كبديلPagedList.Builder
في Kotlin - تمت إضافة
DataSourceFactory.toLiveData()
كبديلLivePagedListBuilder
في Kotlin - تمت إضافة
DataSourceFactory.toObservable()
وtoFlowable()
كبديلَينRxPagedListBuilder
في Kotlin - تمت إضافة
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
لضمان الثبات. تم أيضًا إصدار 1.0.1
لصفحة RxJava2، وهو مطابق لـ 1.0.0-rc1
.
إصلاح الأخطاء
- تم إصلاح الأعطال التي كانت تؤدي إلى تعذُّر إرسال
PagedListAdapter
وAsyncPagedListDiffer
إشارات أحداث النقل. b/110711937
الإصدار 1.0.0 من RxJava2
الإصدار 1.0.0-rc1 من RxJava2
16 أيار (مايو) 2018
سيتم نقل Paging RxJava2 1.0.0-rc1
إلى الإصدار المُحتمَل بدون أي تغييرات من الإصدار التلقائي الأولي.
الإصدار 1.0.0
الإصدار 1.0.0-rc1
19 نيسان (أبريل) 2018 الإصدار المُحتمَل للصفحات
لم تعد لدينا أي مشاكل معروفة أو ميزات جديدة مُجدوَلة لإصدار 1.0.0
من ميزة "التنقّل في الصفحة". يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1
و
مساعدتنا في اختبارها بشكل مكثّف حتى نتمكّن من طرح 1.0.0
مستقر.
لم يتم إجراء أي تغييرات في هذا الإصدار، وهو مطابق لإصدار 1.0.0-beta1
.
الإصدار 1.0.0-beta1
5 نيسان (أبريل) 2018
ستتوفّر ميزة "التنقّل في الصفحة" بشكل تجريبي لفترة قصيرة قبل الانتقال إلى الإصدار التجريبي.
لا نخطّط لإجراء المزيد من التغييرات على واجهة برمجة التطبيقات في Paging 1.0
، ويجب استيفاء معايير صارمة لإجراء أي تغييرات على واجهة برمجة التطبيقات.
تم إصدار الإصدار التجريبي من RxJava2 لاستخدام ميزة "التنقّل" كوحدة اختيارية منفصلة (android.arch.paging:rxjava2:1.0.0-alpha1
)
وسيتم إصدار إصدارات منفصلة مؤقتًا منها إلى أن تصبح مستقرة.
توفّر هذه المكتبة الجديدة بديلاً لـ RxJava2 في LivePagedListBuilder
، وهي قادرة على إنشاء Observable
وFlowable
، مع استخدام Scheduler
بدلاً من Executor
:
Kotlin
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
Java
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
الميزات الجديدة
- تتم إضافة
RxPagedListBuilder
من خلال العنصرandroid.arch.paging:rxjava2
الجديد.
تغييرات واجهة برمجة التطبيقات
تغييرات على واجهة برمجة التطبيقات لتوضيح دور المنفِّذين في أدوات الإنشاء:
تمت إعادة تسمية
setBackgroundThreadExecutor()
إلىsetFetchExecutor()
(فيPagedList.Builder
وLivePagedListBuilder
)تمت إعادة تسمية
setMainThreadExecutor()
إلىsetNotifyExecutor()
(فيPagedList.Builder
).
تم ضبط
PagedList.mCallbacks
عضوًا على أنّه خاص.
إصلاح الأخطاء
يبدأ
LivePagedListBuilder
تحميلPagedList
الأولي على المشغِّل المحدّد، بدلاً من حزمة سلاسل مهام I/O في Arch Components.تم إصلاح سلوك الإبطال في عبوات
DataSource
الداخلية (التي تُستخدَم لتنفيذDataSource.map
، بالإضافة إلى تحميلPositionalDataSource
غير المفعّل العنصر النائب) b/77237534
الإصدار 1.0.0-alpha7
21 آذار (مارس) 2018
تم إصدار ميزة الفهرسة 1.0.0-alpha7
مع ميزة "مراحل النشاط" 1.1.1
. بما أنّ الإصدار التجريبي من Paging alpha7 يعتمد على نقل فئة Function
المذكورة أعلاه، عليك تعديل الاعتماد على lifecycle:runtime
إلى android.arch.lifecycle:runtime:1.1.1
.
من المخطّط أن يكون الإصدار alpha7
من ميزة "الفهرسة" هو الإصدار النهائي قبل طرح الإصدار التجريبي من هذه الميزة.
تغييرات واجهة برمجة التطبيقات
- تحتوي كائنات
DataSource.LoadParams
الآن على دالة إنشاء عامة، وأصبحت كائناتDataSource.LoadCallback
مجردة. يتيح ذلك لفّDataSource
أو اختبارDataSource
مباشرةً باستخدام مكالمة وهمية. b/72600421 - محوِّلات DataSource وDataSource.Factory
- تتيح لك دالة
map(Function<IN,OUT>)
تحويل النتائج التي حمّلهاDataSource
أو لفّها أو تزيينها. mapByPage(<List<IN>,List<OUT>>)
يتيح إجراء ذلك نفسه للمعالجة المجمّعة (على سبيل المثال، إذا كانت العناصر التي تم تحميلها من SQL تحتاج إلى إجراء استعلام إضافي في قاعدة بيانات منفصلة، يمكن إجراء ذلك كمجموعة).
- تتيح لك دالة
- تمت إضافة
PagedList#getDataSource()
كطريقة سهلة b/72611341 - تمت إزالة جميع الفئات المتوقّفة نهائيًا من واجهة برمجة التطبيقات، بما في ذلك بقايا حزمة
recyclerview.extensions
وLivePagedListProvider
. - تم تغيير
DataSource.Factory
من واجهة إلى فئة مجردة لتفعيل وظيفة الخريطة.
إصلاح الأخطاء
- تم تغيير "المطوّرون" ليصبحوا نهائيين. b/70848565
- تمّ الآن إصلاح تنفيذ Room
DataSource
لمعالجة طلبات البحث عن الجداول المتعددة، ويتوفر هذا الإصلاح في الإصدار Room 1.1.0-beta1، راجِع ما سبق. - تم إصلاح خلل كان يؤدي إلى عدم استدعاء
BoundaryCallback.onItemAtEndLoaded
لـPositionalDataSource
إذا كانت العناصر النائبة مفعّلة و كان الحجم الإجمالي مضاعِفًا دقيقًا لحجم الصفحة.
الإصدار 1.0.0-alpha5
22 كانون الثاني (يناير) 2018
إصلاح الأخطاء
- إصلاح تحميل الصفحة عند إيقاف العناصر النائبة b/70573345
- تسجيل إضافي لتتبُّع خطأ IllegalArgumentException b/70360195 (وإصلاح افتراضي من جانب Room)
- يعالج نموذج الرمز البرمجي في Javadoc الأخطاء b/70411933 وb/71467637.