ترقيم الصفحات
يسرد هذا الجدول جميع العناصر في مجموعة androidx.paging.
| العناصر | الإصدار الثابت | إصدار محتمل | الإصدار التجريبي | الإصدار الأولي |
|---|---|---|---|---|
| paging-* | 3.5.3 | - | - | - |
| paging-compose | 3.5.3 | - | - | - |
تحديد الاعتماديات
لإضافة اعتمادية على Paging، يجب تضمين مستودع Maven من Google في مشروعك. اطّلِع على مستودع Maven من Google لمزيد من المعلومات.
أضِف الاعتماديات الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:
Groovy
dependencies { def paging_version = "3.5.3" 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.5.3" }
Kotlin
dependencies { val paging_version = "3.5.3" 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.5.3") }
للحصول على معلومات حول استخدام إضافات Kotlin، يُرجى الاطّلاع على مستندات ktx.
لمزيد من المعلومات حول الاعتماديات، يُرجى الاطّلاع على إضافة اعتماديات الإصدار.
الملاحظات
تساعدنا ملاحظاتك في تحسين Jetpack. يُرجى إعلامنا إذا اكتشفت مشاكل جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مشكلة جديدة. يمكنك إضافة تصويتك إلى مشكلة حالية من خلال النقر على زر النجمة.
يُرجى الاطّلاع على مستندات Issue Tracker لمزيد من المعلومات.
الإصدار 3.5
الإصدار 3.5.3
12 أكتوبر 2026
تم طرح androidx.paging:paging-*:3.5.3. يتضمّن الإصدار 3.5.3 هذه التعديلات.
إصلاح الأخطاء
- لن يعرض
ItemSnapshotListFlowبعد الآن الخطأIllegalArgumentExceptionعندما يصلRemoteMediatorإلى نهاية تقسيم الصفحات في أي من الاتجاهين ويتم تحويل رأس الصفحة أو تذييلها إلى فاصل نهائي. (I821c7، b/566336825) - عندما تتجاوز الصفحات التي تم تحميلها
PagingConfig.maxSize، لن تنخفض الصفحات التي تم تحميلها إلى أقل من صفحتَين لضمان ملء إطار العرض بالبيانات بشكل صحيح. (I037a0، b/565835910)
مساهمة خارجية
نشكر إيغور على إرسال إصلاح الخطأ b/565835910
الإصدار 3.5.2
7 أكتوبر 2026
تم طرح androidx.paging:paging-*:3.5.2. يتضمّن الإصدار 3.5.2 هذه التعديلات.
إصلاح الأخطاء
- لن يعرض
Pager.append()بعد الآن الخطأNoSuchElementExceptionعند إجراء مكالمات قبل اكتمال عملية إعادة التحميل الأولية. لن يتم تنفيذ طلب الإضافة. (Ide387، b/556780796)
الإصدار 3.5.1
12 أغسطس 2026
تم طرح androidx.paging:paging-*:3.5.1. يتضمّن الإصدار 3.5.1 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة تقديم
PagingSource.getRefreshKeyلـanchorPositionغير صحيح وكبير جدًا عند إعادة تحميل صفحة تحتوي على فواصل أثناء الانتقال إلى العناصر النائبة. (I475f0، b/516565503)
الإصدار 3.5.0
6 مايو 2026
تم طرح androidx.paging:paging-*:3.5.0. يتضمّن الإصدار 3.5.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.4.0:
تمت إضافة عامل التشغيل
Flow<PagingData>.asItemSnapshotListFlowلتحويلFlow<PagingData>إلىFlow<ItemSnapshotList>. يعني ذلك أنّه يمكن الآن الوصول إلى البيانات المحمَّلة خارج طبقة واجهة المستخدم، ما يتيح لك دمجFlow<ItemSnapshotList>مع مصادر بيانات أخرى، وتخزين البيانات المقسَّمة إلى صفحات مؤقتًا وتعديلها على الجهاز، أو عرض البيانات المقسَّمة إلى صفحات كجزء من حالة واجهة المستخدم، وغير ذلك.تمت إضافة دالتي الإضافة
Pager.appendوPager.prependلتحميل المزيد من البيانات يدويًا بدون الانتقال للأسفل.تمت إضافة دالّتَي الإضافة
Pager.refreshوPaging.retryللتعافي من أخطاء التحميل عند استخدام واجهة برمجة التطبيقاتasItemSnapshotListFlow.
الإصدار 3.5.0-rc01
22 أبريل 2026
تم طرح androidx.paging:paging-*:3.5.0-rc01. يتضمّن الإصدار 3.5.0-rc01 هذه التعديلات.
لا تغييرات
- ما مِن تغييرات ملحوظة مقارنةً بالإصدار
3.5.0-beta01.
الإصدار 3.5.0-beta01
8 أبريل 2026
تم طرح androidx.paging:paging-*:3.5.0-beta01. يتضمّن الإصدار 3.5.0-beta01 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تمت إعادة تسمية واجهة برمجة التطبيقات
Flow<PagingData>.asStateإلىFlow<PagingData>.asItemSnapshotListFlow(I0dc11، b/496548025)
الإصدار 3.5.0-alpha01
11 مارس 2026
تم طرح androidx.paging:paging-*:3.5.0-alpha01. يتضمّن الإصدار 3.5.0-alpha01 هذه التعديلات.
الميزات الجديدة
يحتوي العنصر
paging-commonالآن على عامل تشغيل جديدasStateفيFlow<PagingData>لتحويله إلىFlow<ItemSnapshotList>. يتيح ذلك إمكانات مثل:- دمج بيانات Flow of
ItemSnapshotListمع مصادر بيانات أخرى - مشاركة سير العمل مع عدة جهات جمع بدون
cachedIn - تخزين البيانات المقسّمة إلى صفحات مؤقتًا على الجهاز
- تعديل البيانات المقسّمة إلى صفحات في الذاكرة
- عرض البيانات المقسّمة إلى صفحات كجزء من حالة واجهة المستخدم
// In your ViewModel val pager = Pager(pagingConfig, pagingSourceFactory) val pagerFlow = pager.flow.asState() // alterantively convert the flow to a SharedFlow val pagerFlow = pager.flow.asState().stateIn() // In presenter layer val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList) val snapshot = itemsFlow.value LazyColumn { items(items = snapshot.items) { ... } }- دمج بيانات Flow of
أضافت أداة
paging-commonأيضًا واجهتَي برمجة التطبيقاتPager.appendوPager.prependلتفعيل عمليات التحميل يدويًا على أي من حافتي العناصر المحمَّلة.- عند استخدامها مع
paging-runtimeأوpaging-compose، توفّر بديلاً لتحميل المزيد من البيانات بالإضافة إلى التمرير - عند استخدام هذه السمة مع واجهة برمجة التطبيقات الجديدة
asState، تكون الطريقة الوحيدة لتحميل المزيد من البيانات
LazyColumn { item { /** * Load more items when users scroll near the top of loaded items. */ LaunchedEffect(viewModel) { viewModel.prepend() } } items(snapshot.items) { item -> Text("Item: $item") } item { /** * Load more items when users scroll near the bottom of loaded items. */ LaunchedEffect(viewModel) { viewModel.append() } } }- عند استخدامها مع
تمت إضافة
Pager.refreshوPager.retryللتعافي من أخطاء التحميل عند استخدام واجهة برمجة التطبيقاتasState. يمكنك الاطّلاع على هذا المستند لمزيد من نماذج استخدام واجهات برمجة التطبيقات الجديدة. (I1e1e9، If3c87، Idbd48، Id1e1d، I816fe)
الإصدار 3.4
الإصدار 3.4.2
11 مارس 2026
تم طرح androidx.paging:paging-*:3.4.2. يتضمّن الإصدار 3.4.2 هذه التعديلات.
لا تغييرات
- لا يتضمّن هذا الإصدار أي تغيير في واجهة برمجة التطبيقات أو السلوك مقارنةً بالإصدار 3.4.1.
الإصدار 3.4.1
11 فبراير 2026
تم طرح androidx.paging:paging-*:3.4.1. يتضمّن الإصدار 3.4.1 هذه التعديلات.
تحديث الاعتماديات
- تم تحديث اعتمادية guava في paging-guava من الإصدار 31.1 إلى 32.0.1.
الإصدار 3.4.0
28 يناير 2026
تم طرح androidx.paging:paging-*:3.4.0. يتضمّن الإصدار 3.4.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.3.0:
- تمّت إضافة المزيد من أهداف KMP إلى
paging-commonوpaging-testingوpaging-compose. أصبحت جميعها متوافقة مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS) - تمت إزالة إمكانية استخدام
macosX64وiosX64وwatchosX64وtvosX64فيpaging-commonوpaging-testingوpaging-composeللتوافق مع إيقاف Jetbrains لأهداف macosX64 نهائيًا. - تمت إضافة واجهة برمجة تطبيقات
PagingStateجديدةclosestItemAroundPositionلاسترداد العنصر الذي تم تحميله والأقرب إلى الموضع المستهدَف ويتطابق مع دالة الإدخال. يمكن استخدام هذه السمة لإنشاء مفاتيح إعادة تحميل مستندة إلى العناصر عندما يكون العنصر المثالي القابل للتثبيت قريبًا من موضع الاستهداف الدقيق ولكن ليس فيه.
الإصدار 3.4.0-rc01
14 يناير 2026
تم طرح androidx.paging:paging-*:3.4.0-rc01. يتضمّن الإصدار 3.4.0-rc01 هذه التعديلات.
الميزات الجديدة
- تمت إزالة التوافق مع منصات KMP التالية:
macosX64وiosX64وwatchosX64وtvosX64للتوافق مع إيقاف Jetbrains نهائيًا لأهداف macosX64. (7cb9a4)
الإصدار 3.4.0-beta01
17 ديسمبر 2025
تم طرح androidx.paging:paging-*:3.4.0-beta01. يتضمّن الإصدار 3.4.0-beta01 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة التزامن بين عمليات تحميل
RecyclerViewوRefreshالتي تؤدي إلىIndexOutOfBoundsExceptionفيRecyclerView. يمكن أن تؤدي تحديثات واجهة المستخدم التي تتم مقاطعتها بسبب عمليات تحميلRefreshالمستمرة إلى إلغاء مزامنة حالة Paging معRecyclerView. ويمكن حلّ هذه المشكلة من خلال إعادة ضبط ميزة Paging على حالتها السابقة قبل إعادة التحميل في حال مقاطعة عملية إعادة التحميل (أي من خلال تحميلRefreshمتتالي). (I771b0، b/409809768)
الإصدار 3.4.0-alpha04
10 سبتمبر 2025
تم طرح androidx.paging:paging-*:3.4.0-alpha04. يتضمّن الإصدار 3.4.0-alpha04 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة تطبيقات
PagingStateجديدةclosestItemAroundPositionلاسترداد العنصر الذي تم تحميله والأقرب إلى الموضع المستهدَف والذي يتطابق مع دالة الإدخال. يمكن استخدام هذه الطريقة لإنشاء مفاتيح إعادة تحميل مستندة إلى العناصر، حيث يكون العنصر المثالي القابل للتثبيت في مكان قريب من موضع الاستهداف الدقيق وليس فيه تمامًا. (I96e5c، b/440187139)
الإصدار 3.4.0-alpha03
27 أغسطس 2025
تم طرح androidx.paging:paging-*:3.4.0-alpha03. يتضمّن الإصدار 3.4.0-alpha03 هذه التعديلات.
الميزات الجديدة
- أضافت مكتبة Paging-common نظام التشغيل المكتبي كهدف جديد من Kotlin Multiplatform (KMP). يتوافق الآن بشكلٍ كامل مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (Id2483، b/436884811)
- أضافت مكتبة Paging-testing أهدافًا جديدة من Kotlin Multiplatform (KMP). يتوافق الآن مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (I0c543، b/435014650)
- أضافت مكتبة Paging-compose أهدافًا جديدة من Kotlin Multiplatform (KMP). يتوافق الآن مع JVM(Android وDesktop)، وNative (Linux وiOS وwatchOS وtvOS وmacOS وMinGW)، والويب (JavaScript وWasmJS). (I70d44، b/436884801)
تغييرات واجهة برمجة التطبيقات
- تغيير الحد الأدنى التلقائي لإصدار SDK من الإصدار 21 من واجهة برمجة التطبيقات إلى الإصدار 23 من واجهة برمجة التطبيقات (Ibdfca، b/380448311، b/435705964، b/435705223)
الإصدار 3.4.0-alpha02
30 يوليو 2025
تم طرح androidx.paging:paging-*:3.4.0-alpha02. يتضمّن الإصدار 3.4.0-alpha02 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تتيح
PagingData.fromالآن ضبطplaceholdersBeforeوplaceholdersAfter. يُرجى العِلم أنّ التنقّل بين هذه العناصر النائبة لا يؤدي إلى تحميلها. (I06983)
الإصدار 3.4.0-alpha01
2 يوليو 2025
تم طرح androidx.paging:paging-*:3.4.0-alpha01. يتضمّن الإصدار 3.4.0-alpha01 هذه التعديلات.
الميزات الجديدة
- أضافت مكتبة Paging أهداف KMP التالية: watchos وtvos وmingwX64 وwatchosDeviceArm64 وlinuxArm64. (I237dd وIa62b3 وb/368046982 وIcf15d وb/364652024 وI139d3 وb/338268719)
إصلاح الأخطاء
- لن تؤدي اختبارات الوحدات في Android التي تستخدم الإصدار 3.3 أو إصدارًا أحدث من مكتبة Paging إلى حدوث خطأ من
PagingLogger(Ia9400، b/331684448). - تم إصلاح خطأ يتسبّب في ظهور رسالة الخطأ
IndexOutOfBoundsExceptionفيRecyclerViewعندما ينتقل المستخدم إلى أسفل الصفحة أثناء تحديث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 هذه التعديلات.
إصلاح الأخطاء
- سيتم الآن تخزين إشارات إعادة التحميل والمحاولة مرة أخرى التي يتم إرسالها أثناء إعادة التحميل الأولية وإعادة إرسالها تلقائيًا عندما يصبح مقدّم العرض في Paging جاهزًا.
مساهمة خارجية
الإصدار 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 عمليات النشر هذه.
إصلاح الأخطاء
- لن تظهر رسالة الخطأ
Method isLoggable in android.util.Log not mockedبعد الآن في اختبارات وحدات Android التي تستخدم الإصدار 3.3 من Paging أو الإصدارات الأحدث. (Ia9400، b/331684448)
الإصدار 3.3.2
7 أغسطس 2024
تم طرح androidx.paging:paging-*:3.3.2. يتضمّن الإصدار 3.3.2 هذه التعديلات.
الميزات الجديدة
- تمّت إضافة أهداف جديدة من Kotlin-Multiplatform إلى
paging-commonوpaging-testing:watchosوtvosوlinuxArm64(90c9768)، (53e0eca)
الإصدار 3.3.1
24 يوليو 2024
تم طرح androidx.paging:paging-*:3.3.1. يتضمّن الإصدار 3.3.1 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح مشكلة عدم إمكانية تشغيل المزيد من عمليات التحميل عند إعادة تحميل مصدر البيانات الأساسي أثناء التمرير، وذلك في
AsyncPagingDataDifferأو واجهات برمجة التطبيقات المستندة إليه، مثلPagingDataAdapterالمستخدَم معRecyclerView. (I60ca5، b/352586078) - تم إصلاح عطل يحدث عند إزالة عناصر من مصدر البيانات الاحتياطي أثناء الانتقال في
RecyclerViewباستخدامPagingDataAdapterأوAsyncPagingDataDiffer. (I8c65a، b/347649763)
الإصدار 3.3.0
14 مايو 2024
تم طرح androidx.paging:paging-*:3.3.0. يتضمّن الإصدار 3.3.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.2.0
- أصبح الصف "
PagingDataPresenter" الآن صفًا علنيًا. يمكن الآن إنشاء أدوات العرض على منصات متعددة استنادًا إلىPagingDataPresenterبدلاً من الحاجة إلى واجهات برمجة تطبيقات داخلية خاصة بالتنقل بين الصفحات أوpaging-runtimeAsyncPagingDataDiffer. - تمت إضافة طريقتَي المساعدة الجديدتَين
LoadStatesوCombinedLoadStatesفيhasErrorوisIdleللتحقّق مما إذا كانتLoadStatesفي حالة خطأ أو حالةNotLoadingعلى التوالي. تمت أيضًا إضافة طريقة جديدة لإضافةawaitNotLoading()Kotlin علىFlow<CombinedLoadStates>تنتظر حتى يتم تحميل الإعلان في حالةNotLoadingأو حالة خطأ. - يرسل
PagingData.empty()الآن حالاتNotLoadingتلقائيًا ما لم يتم تمريرLoadStatesمخصّصة إلى الدالة الإنشائية. يختلف هذا عن السلوك الحالي الذي لا يتم فيه إرسالLoadStatesعند إرساله إلىPagingDataAdapterأو يتم فيه إرسال حالات التحميل عند تجميعها كـLazyPagingItems. عند جمعها كـLazyPagingItems، ستعرض الآن أيضًا قائمة فارغة فورًا عند الإنشاء الأولي.
التوافق مع Kotlin Multiplatform
تتضمّن مكتبة Paging الآن عناصر متوافقة مع Kotlin Multiplatform، ويعود الفضل في ذلك إلى حدّ كبير إلى العمل الذي تمّت إضافته من مشروع multiplatform-paging التابع لشركة CashApp.
- نقلت
paging-commonجميع واجهات برمجة التطبيقات في مكتبة Paging 3 إلىcommon، وأصبحت متوافقة الآن مع jvm وiOS بالإضافة إلى Android. - تم نقل رمز
paging-testingإلىcommon، وأصبح متوافقًا الآن مع jvm وiOS بالإضافة إلى Android. - نقلت
paging-composeالرمز البرمجي إلىcommonوأصدرت عنصر Android، ما يتيح التوافق مع منصات متعددة مثلandroidx.compose. - ستبقى أجهزة
paging-runtimeوpaging-guavaوpaging-rxjava2وpaging-rxjava3متوافقة مع Android فقط.
الإصدار 3.3.0-rc01
1 مايو 2024
تم إصدار androidx.paging:paging-*:3.3.0-rc01 بدون أي تغييرات في الإصدار 3.3.0-beta01 من مكتبة Paging. يتضمّن الإصدار 3.3.0-rc01 هذه التعديلات.
الإصدار 3.3.0-beta01
3 أبريل 2024
تم إصدار androidx.paging:paging-*:3.3.0-beta01 بدون أي تغييرات ملحوظة. يتضمّن الإصدار 3.3.0-beta01 هذه التعديلات.
الإصدار 3.3.0-alpha05
20 مارس 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha05. يتضمّن الإصدار 3.3.0-alpha05 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تستخدم مكتبة Paging الآن التعليق التوضيحي
@MainThreadفي AndroidX Annotation للرمز البرمجي الشائع. (I78f0d، b/327682438)
الإصدار 3.3.0-alpha04
6 آذار (مارس) 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha04. يتضمّن الإصدار 3.3.0-alpha04 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح أخطاء بسيطة في المستندات تتعلّق بإضافة ميزة التوافق مع Kotlin Multiplatform. (aosp/2950785)
الإصدار 3.3.0-alpha03
7 فبراير 2024
تم طرح androidx.paging:paging-*:3.3.0-alpha03. يتضمّن الإصدار 3.3.0-alpha03 هذه التعديلات.
الميزات الجديدة
- أصبح الصف "
PagingDataPresenter" الآن صفًا عامًا. يمكن الآن إنشاء مقدِّمي عروض متعدّدي المنصات علىPagingDataPresenterبدلاً من طلب واجهات برمجة تطبيقات Paging داخلية أوAsyncPagingDataDifferمنpaging-runtime. (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)). لا يعمل هذا الحلّ إلا مع عمليات Flow التي يمكن إكمالها (مثلflowOf(PagingData.from(...))). أما عمليات Flow التي لا يمكن إكمالها (مثلMutableStateFlow، فاستخدِم عملية التحميل الزائدPagingData.fromالتي توفّرLoadStates). (I502c3) - تستخدم ميزة "تقسيم الصفحات" في 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وitemKeyitemContentTypeعلى مستوى أدنى، ما يساعدك في تنفيذ المَعلمتَينkeyوcontentTypeفي واجهات برمجة التطبيقات العاديةitemsالمتوفّرة حاليًا لـLazyColumnوLazyVerticalGrid، بالإضافة إلى ما يعادلهما في واجهات برمجة التطبيقات مثلHorizontalPager. - تم إيقاف
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)نهائيًا، وهما لا يتوافقان إلا معLazyListScope.
- إتاحة معاينة قائمة بالبيانات الوهمية من خلال إنشاء
- عنصر
paging-testingجديد يوفّر واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من طبقات تطبيقك وعملية دمجها مع مكتبة Paging بشكل منفصل. على سبيل المثال، يشمل ذلك- فئة
TestPagerتتيح لك التحقّق من سلوك عملية تنفيذPagingSourceالمخصّصة بشكل مستقل عن Pager وواجهة المستخدم الحقيقية. - واجهات برمجة التطبيقات
asPagingSourceFactoryلتحويلFlow<List<Value>>أوList<Value>ثابت إلىPagingSourceFactoryيمكن تمريره إلى أداة عرض الصفحات في الاختبارات - إضافة Kotlin
asSnapshotفيFlow<PagingData<Value>>، والتي تترجمFlow<PagingData<Value>>إلىList<Value>مباشرةً. تتيح لك واجهةasSnapshot lambdaمحاكاة واجهة المستخدم في تطبيقك من خلال واجهات برمجة التطبيقات، مثلscrollToأوappendScrollWhile، لتتمكّن من التحقّق من صحة لقطة البيانات في أي نقطة في مجموعة البيانات المقسّمة إلى صفحات.
- فئة
- تمت إضافة سجلّات تلقائية لعرض معلومات تصحيح أخطاء Paging على مستويَين:
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توفّر سطح واجهة برمجة تطبيقات أكثر وضوحًا من دوال lambda الحالية() -> PagingSource. يمكن استخدام هذه الفئة لإنشاء مثيلPager. (I33165، b/280655188) - تمت إضافة واجهة برمجة تطبيقات جديدة
paging-testingمنList<Value>.asPagingSourceFactory()للحصول علىPagingSourceFactoryيتم تحميله فقط من قائمة بيانات غير قابلة للتغيير. يجب مواصلة استخدام الإضافة الحالية علىFlow<List<Value>>للاختبار مع أجيال متعددة من البيانات الثابتة. (Id34d1، b/280655188)
تغييرات واجهة برمجة التطبيقات
- تم الآن إضافة تعليقات توضيحية إلى جميع واجهات برمجة التطبيقات العامة في paging-testing باستخدام
@VisibleForTestingلضمان استخدام واجهات برمجة التطبيقات هذه في الاختبارات فقط. (I7db6e) - لم تعُد واجهة برمجة التطبيقات
asSnapshotتتطلّب تمريرCoroutineScope. ويتم الآن تلقائيًا استخدام السياق المكتسَب من النطاق الرئيسي. (Id0a78، b/282240990) - تمت إعادة ترتيب مَعلمات الدالة الإنشائية
TestPagerلتتطابق بشكلٍ بديهي مع ترتيب مَعلمات الدالة الإنشائيةPagerالفعلية (I6185a) - تم نقل استخدام النوع
() -> PagingSource<Key, Value>في اختبار الترقيم إلى النوعPagingSourceFactory<Key, Value>. (I4a950، b/280655188)
التغييرات في السلوك
- لم يعُد من الضروري استخدام أداة الإرسال الرئيسية لتنفيذ اختبارات
asSnapshotPaging. ولن يؤدي ضبطه إلى إجراء أي تغييرات على سلوك الاختبار. (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 مجموعة من بيانات Paged. يسهّل ذلك إجراء اختبارات التقسيم على صفحات، على سبيل المثال، تحويلاتPagingDataمن خلال تزييف مصدر بيانات ليجمعه Pager. (I6f230، b/235528239) تم توسيع نطاق العنصر
paging-testingليشمل واجهات برمجة تطبيقات جديدة مناسبة للتحقّق من صحة البيانات الواردة فيFlow<PagingData<T>>. يمكن استخدام ذلك، على سبيل المثال، لتأكيد ناتجFlow<PagingData<T>>من طبقة ViewModel.يتم ذلك من خلال إضافة
asSnapshotKotlin علىFlow<PagingData<Value>>، ما يؤدي إلى تحويلFlow<PagingData<Value>>إلىList<Value>مباشر. تتيح لك دالة lambda فيasSnapshotمحاكاة واجهة المستخدم في تطبيقك من خلال واجهات برمجة التطبيقات، مثلscrollToأوappendScrollWhile، بطريقة قابلة للتكرار ومتسقة حتى تتمكّن من التحقّق من صحة لقطة البيانات في أي نقطة في مجموعة البيانات المقسّمة إلى صفحات.// Create your ViewModel instance val viewModel = … // Get the Flow of PagingData from the ViewModel val data< Flow<PagingData<String>> = viewModel.data val snapshot: List<String> = data.asSnapshot { // Each operation inside the lambda waits for the data to settle before continuing scrollTo(index = 50) // While you can’t view the items within the asSnapshot call, // you can continuously scroll in a direction while some condition is true // i.e., in this case until you hit a placeholder item appendScrollWhile { item: String -> item != “Header 1” } } // With the asSnapshot complete, you can now verify that the snapshot // has the expected values
asSnapshotهي طريقةsuspendمن المتوقّع تشغيلها ضمنrunTest. لمزيد من المعلومات، يمكنك الاطّلاع على مقالة اختبار الكوروتينات في Kotlin على Android. (I55fd2 وI5bd26 وI7ce34 وI51f4d وI2249f وId6223 وIc4bab وIb29b9 و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
يتضمّن هذا الإصدار عنصرًا جديدًا: paging-testing. يوفّر هذا العنصر واجهات برمجة تطبيقات مصمَّمة لإجراء اختبارات الوحدات لكل طبقة من طبقات تطبيقك ودمجها مع مكتبة Paging بشكل منفصل.
على سبيل المثال، يتضمّن هذا الإصدار الأول فئة TestPager تتيح لك التحقّق من سلوك تنفيذ PagingSource المخصّص بشكل مستقل عن Pager وواجهة المستخدم الحقيقية التي تحتاج عادةً إلى محاكاة دمج ميزة "تقسيم الصفحات" من البداية إلى النهاية.
يجب اعتبار TestPager مزيّفًا، أي اختبارًا مزدوجًا يعكس التنفيذ الحقيقي لـ Pager مع توفير واجهة برمجة تطبيقات مبسّطة لاختبار PagingSource. واجهات برمجة التطبيقات هذه هي واجهات suspend ويجب تشغيلها ضمن runTest كما هو موضّح في دليل اختبار الكوروتينات في Kotlin على Android.
يمكن العثور على مثال على واجهات برمجة التطبيقات هذه قيد الاستخدام في اختبارات room-paging التي تمت إعادة تصميمها لاستخدام TestPager.
التغييرات في واجهة برمجة التطبيقات
- تتيح هذه السمة تكرارًا مناسبًا على
LoadResult.Page.dataمن خلالLoadResult.Page.iterator(). يسمح ذلك بشكل غير مباشر باستخدام طريقة مكتبة Kotlin العاديةflattenعند توفّرList<LoadResult.Page>، مثل سمةpagesفيPagingStateالتي يتم تمريرها إلى طريقةPagingSource.getRefreshKey. (Ie0718)
الإصدار 3.2.0-alpha02
10 أغسطس 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha02. يتضمّن الإصدار 3.2.0-alpha02 هذه التعديلات.
الميزات الجديدة
- توفر Paging الآن سجلات من خلال الفئتين
AsyncPagingDataDifferأوPagingDataAdapterلعرض معلومات تصحيح الأخطاء التي تم جمعها منPagingData. - يمكن تفعيل السجلّات باستخدام الأمر
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)
إصلاح الأخطاء
- تم إصلاح خطأ عدم توفّر دالة الإنشاء
PagingDataDifferعند استخدامpaging-common:3.2.0-alpha01مع بيئة التشغيلpaging-runtime:3.1.1أو الإصدارات الأقدم.(b/235256201)
الإصدار 3.2.0-alpha01
1 يونيو 2022
تم طرح androidx.paging:paging-*:3.2.0-alpha01. يتضمّن الإصدار 3.2.0-alpha01 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة أدوات إنشاء للفئتين
PagingDataAdapterوAsyncPagingDataDifferتقبلCoroutineContextبدلاً منCoroutineDispatcher. (Idc878) - بشكلٍ تلقائي، لن تؤثر
PagingData.from()وPagingData.empty()فيCombinedLoadStatesمن جهة مقدّم العرض. تمت إضافة حمل زائد جديد يسمح بتمريرsourceLoadStatesوremoteLoadStatesإلى هذه الدوال الإنشائية للحفاظ على السلوك الحالي لضبطLoadStatesعلى أن يكون نهائيًا بالكامل (أيNotLoading(endOfPaginationReached = false))، مع خيار تضمين الولايات البعيدة أيضًا إذا لزم الأمر. في حال عدم تمريرLoadStates، سيتم الاحتفاظ بالسمةCombinedLoadStatesالسابقة في جانب المقدّم عند تلقّي السمةPagingDataالثابتة. (Ic3ce5، b/205344028)
إصلاح الأخطاء
- تمت الآن إعطاء الأولوية لنتيجة
PagingSource.getRefreshKey()بشكل صحيح علىinitialKeyفي الحالات التي تعرض فيها قيمة فارغة، ولكن تم ضبط قيمة غير فارغة لـinitialKey. (Ic9542، b/230391606)
المساهمة الخارجية
- تم تعديل واجهة برمجة التطبيقات :compose:ui:ui-test (updateApi) بسبب نقل البيانات من test-coroutines-lib (I3366d)
الإصدار 3.1
الإصدار 3.1.1
9 آذار (مارس) 2022
تم طرح androidx.paging:paging-*:3.1.1. يتضمّن الإصدار 3.1.1 هذه التعديلات.
إصلاح الأخطاء
- تمت إزالة أحداث
LoadState.NotLoadingالوسيطة بين الأجيال التي أدرجتها.cachedIn()بشكل غير صحيح. يسهّل هذا التغيير كثيرًا التفاعل مع تغييراتLoadStateمن خلال إزالة أحداثLoadState.NotLoadingالمتكررة التي تم إنشاؤها بين إعادة محاولة عمليات التحميل التي تعذّر إجراؤها، أو عند إعادة التحميل أو أثناء الإبطال.
الإصدار 3.1.0
17 تشرين الثاني (نوفمبر) 2021
تم طرح androidx.paging:paging-*:3.1.0. يتضمّن الإصدار 3.1.0 هذه التعديلات.
التغييرات المهمة منذ الإصدار 3.0.0
- لم تعُد واجهتا برمجة التطبيقات
Flow<PagingData>.observableوFlow<PagingData>.flowableتجريبيتين - تغييرات السلوك إلى
LoadState:- أصبح "
endOfPaginationReached" دائمًاfalseلـ "LoadType.REFRESH" لكل من "PagingSource" و"RemoteMediator" - تنتظر الآن
LoadStatesمن Paging قيمًا صالحة من كل منPagingSourceوRemoteMediatorقبل إرسالها إلى المراحل اللاحقة. ستبدأ الآن الأجيال الجديدة منPagingDataدائمًا بشكل صحيح باستخدامLoadingلحالة إعادة التحميل بدلاً من إعادة الضبط علىNotLoadingبشكل غير صحيح في بعض الحالات. - لم يعُد
.loadStateFlowو.addLoadStateListenerفي واجهات برمجة التطبيقات الخاصة بمقدِّم العرض يرسلان بشكل متكررCombinedLoadStatesأوليًا يتضمّن دائمًا حالات الوسيط مضبوطة علىnull
- أصبح "
- يتم الآن إلغاء الأجيال السابقة بشكل فوري عند الإبطال أو إنشاء أجيال جديدة. لم يعُد من الضروري استخدام
.collectLatestعلىFlow<PagingData>، ولكن لا يزال يُنصح بذلك. - تمت إضافة
PagingSource.LoadResult.Invalidكنوع جديد للقيمة التي تم إرجاعها منPagingSource.load، ما يؤدي إلى تجاهل Paging لأي طلبات تحميل معلّقة أو مستقبلية إلىPagingSourceهذا وإبطاله. تم تصميم نوع القيمة التي تم إرجاعها هذا للتعامل مع البيانات التي قد تكون غير صالحة أو قديمة والتي يمكن إرجاعها من قاعدة البيانات أو الشبكة. - تمت إضافة واجهتَي برمجة التطبيقات
.onPagesPresentedو.addOnPagesUpdatedListenerالخاصتَين بالمقدِّمين، واللتين يتم تشغيلهما بشكل متزامن أثناء عرض الصفحات في واجهة المستخدم. يمكن أن تحدث تعديلات على الصفحة في الحالات التالية:- اكتمال التحميل الأولي لجيل جديد من PagingData، بغض النظر عما إذا كان الجيل الجديد يحتوي على أي تغييرات على العناصر المعروضة، أي: سيؤدي إنشاء جيل جديد يكمل التحميل الأولي بدون تعديلات لأنّ القائمة هي نفسها إلى تفعيل هذه الدالة.
- يتم إدراج صفحة، حتى إذا لم تكن الصفحة المدرَجة تحتوي على أي عناصر جديدة.
- يتم إسقاط صفحة، حتى إذا كانت الصفحة التي تم إسقاطها فارغة.
الإصدار 3.1.0-rc01
3 نوفمبر 2021
تم طرح androidx.paging:paging-*:3.1.0-rc01. يتضمّن الإصدار 3.1.0-rc01 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح حالة السباق وتسريب الذاكرة في .cachedIn() في الحالات التي يتم فيها إرسال أحداث تحميل متعددة من خلال Paging downstream في حال عدم وجود مراقبين أو بين وقت تبديل المراقب إلى 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). في هذا السيناريو، يُنصح بالتحقّق من الإبطال بعد التحميل وعرض LoadResult.Invalid، ما يؤدي إلى تجاهل Paging لأي طلبات تحميل معلّقة أو مستقبلية إلى PagingSource وإبطالها.
يتوافق نوع القيمة التي تم إرجاعها هذا أيضًا مع واجهة برمجة التطبيقات Paging2 التي تستخدم LivePagedList أو RxPagedList. عند استخدام PagingSource مع واجهات برمجة التطبيقات PagedList في Paging2، يتم فصل PagedList على الفور، ما يؤدي إلى إيقاف المحاولات الإضافية لتحميل البيانات على PagedList هذه وتفعيل الإبطال في PagingSource.
LoadResult هي فئة محكمة الإغلاق، ما يعني أنّ هذا التغيير غير متوافق مع المصدر، وبالتالي فإنّ حالات الاستخدام التي تستخدم نتائج PagingSource.load مباشرةً ستضطر إلى التعامل مع LoadResult.Invalid في وقت الترجمة البرمجية. على سبيل المثال، على مستخدمي Kotlin الذين يستفيدون من exhaustive-when للتحقّق من نوع القيمة التي تم إرجاعها إضافة عملية تحقّق من النوع غير الصالح. (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 التي يتم تشغيلها فورًا بعد تعديل الصفحات المعروضة في واجهة المستخدم.
بما أنّ عمليات التحديث هذه متزامنة مع واجهة المستخدم، يمكنك استدعاء طرق المحوّل، مثل .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)
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في عدم إرسال أحداث 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 هذه التعديلات.
الميزات الجديدة
- توفّر مكتبة Paging الآن سجلّات من خلال فئة
LazyPagingItemsلعرض معلومات تصحيح الأخطاء التي تم جمعها من PagingData. - يمكن تفعيل السجلّات من خلال الأمر
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE]. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
إصلاح الأخطاء
- تم إصلاح خطأ عدم توفّر الدالة الإنشائية
PagingDataDifferعند استخدامpaging-compose:1.0.0-alpha15معpaging-common:3.1.1أو إصدار أقدم.(b/235256201،b/239868768)
الإصدار 1.0.0-alpha15
1 يونيو 2022
تم طرح androidx.paging:paging-compose:1.0.0-alpha15. يتضمّن الإصدار 1.0.0-alpha15 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تمت إضافة أدوات إنشاء للفئتَين
PagingDataAdapterوAsyncPagingDataDifferتقبلCoroutineContextبدلاً منCoroutineDispatcher. (Idc878)
إصلاح الأخطاء
- يضبط "
LazyPagingItems" الآنloadStateالأولي على معدّل إعادة تحميل يبلغLoadState.Loading. (I55043، b/224855902)
الإصدار 1.0.0-alpha14
13 أكتوبر 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha14. يتضمّن الإصدار 1.0.0-alpha14 هذه التعديلات.
الإصدار 1.0.0-alpha13
29 سبتمبر 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha13. يتضمّن الإصدار 1.0.0-alpha13 هذه التعديلات.
تغييرات واجهة برمجة التطبيقات
- تم استبدال الدالة
LazyPagingItems.snapshot()بالسمةLazyPagingItems.itemSnapshotList(Ie2da8) - تمت إزالة
LazyPagingItems.getAsState()المتوقفة نهائيًا (Ie65e4)
الإصدار 1.0.0-alpha12
21 يوليو 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha12. يتضمّن الإصدار 1.0.0-alpha12 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- أصبح بإمكان
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)المستخدَمَين لربط 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من 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 هذه التعديلات.
تم تعديلها لتتكامل مع الإصدار alpha12 من Compose.
الإصدار 1.0.0-alpha06
28 يناير 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha06. يتضمّن الإصدار 1.0.0-alpha06 هذه التعديلات.
إصلاح الأخطاء
تم تعديل الإصدار ليعتمد على الإصدار 1.0.0-alpha11 من Compose.
الإصدار 1.0.0-alpha05
13 يناير 2021
تم طرح androidx.paging:paging-compose:1.0.0-alpha05. يتضمّن الإصدار 1.0.0-alpha05 هذه التعديلات.
تم تعديلها لتعتمد على الإصدار 1.0.0-alpha10 من Compose.
الإصدار 1.0.0-alpha04
16 ديسمبر 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha04. يتضمّن الإصدار 1.0.0-alpha04 هذه التعديلات.
إصلاح الأخطاء
- تم تعديل سمات الراحة،
CombinedLoadStates.refreshوCombinedLoadStates.prependوCombinedLoadStates.appendللانتقال فقط منLoadingإلىNotLoadingبعد أن تصبح حالتا تحميل الوسيط والمصدرNotLoadingلضمان تطبيق التحديث عن بُعد. (I65619)
الإصدار 1.0.0-alpha03
2 ديسمبر 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha03. يتضمّن الإصدار 1.0.0-alpha03 هذه التعديلات.
- تم تعديلها لتتوافق مع الإصدار 1.0.0-alpha08 من Compose.
الإصدار 1.0.0-alpha02
11 تشرين الثاني (نوفمبر)، 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha02. يتضمّن الإصدار 1.0.0-alpha02 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة الطرق
.peek()و.snapshot()و.retry()و.refresh()إلىLazyPagingItems التي تعرض الوظائف نفسها المتاحة فيAsyncPagingDataDiffer/PagingDataAdapter(Iddfe8، b/172041660)
الإصدار 1.0.0-alpha01
28 أكتوبر 2020
تم طرح androidx.paging:paging-compose:1.0.0-alpha01. يتضمّن الإصدار 1.0.0-alpha01 هذه التعديلات.
الميزات الجديدة
توفّر حزمة paging-compose إمكانية الدمج بين مكتبة Paging وJetpack Compose. مثال بسيط على الاستخدام:
@Composable
@OptIn(ExperimentalLazyDsl::class)
fun ItemsDemo(flow: Flow<PagingData<String>>) {
val lazyPagingItems = flow.collectAsLazyPagingItems()
LazyColumn {
items(lazyPagingItems) {
Text("Item is $it")
}
}
}
الإصدار 3.0.1
الإصدار 3.0.1
21 يوليو 2021
تم طرح androidx.paging:paging-*:3.0.1. يتضمّن الإصدار 3.0.1 هذه التعديلات.
إصلاح الأخطاء
- لن يؤدي الوصول إلى
PagedList.dataSourceمن القيمة الأولية التي تنتجهاLivePagedListأوRxPagedListإلى ظهور الخطأ IllegalStateException (I96707) بشكل غير صحيح.
الإصدار 3.0.0
الإصدار 3.0.0
5 مايو 2021
تم طرح androidx.paging:paging-*:3.0.0. يتضمّن الإصدار 3.0.0 هذه التعديلات.
الميزات الرئيسية في الإصدار 3.0.0
تم إيقاف معظم واجهات برمجة التطبيقات الحالية من Paging 2.x.x نهائيًا لصالح واجهات برمجة التطبيقات الجديدة في Paging 3 لإجراء التحسينات التالية:
- توافق تام مع أنماط "كوروتين" وFlow في Kotlin
- الدعم في حال الإلغاء
- إشارات مدمجة لحالة التحميل والخطأ
- إعادة المحاولة وإعادة التحميل
- تم دمج جميع الفئات الفرعية الثلاث لـ DataSource في فئة PagingSource موحّدة
- تحويلات مخصّصة للصفحات، بما في ذلك تحويل مدمج لإضافة فواصل
- رؤوس وتذييلات حالة التحميل
الإصدار 3.0.0-rc01
21 أبريل 2021
تم طرح androidx.paging:paging-*:3.0.0-rc01. يتضمّن الإصدار 3.0.0-rc01 هذه التعديلات.
إصلاح الأخطاء
- تم إصلاح المشكلة التي كانت تتسبّب أحيانًا في عدم إرسال أحداث 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عند استدعاء إعادة التحميل عن بُعد. - تم إصلاح خطأ حيث يمكن أن تمنع الصفحات الفارغة التي يعرضها PagingSource ميزة "تقسيم النتائج على صفحات" من الجلب مرة أخرى لتنفيذ
prefetchDistance، ما يؤدي إلى "توقّف" ميزة "تقسيم النتائج على صفحات".
الإصدار 3.0.0-beta01
10 فبراير 2021
تم طرح androidx.paging:paging-*:3.0.0-beta01. يتضمّن الإصدار 3.0.0-beta01 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تعرض الآن برامج تضمين Rx2 وRx3 التعليقات التوضيحية التجريبية التي تعتمد عليها. إذا كنت تستخدم برامج تضمين Rx compat في paging-rxjava2 أو
paging-rxjava3، ستحتاج الآن إلى إضافة تعليقات توضيحية على الاستخدامات باستخدام
@OptIn(ExperimentalCoroutinesApi::class)(Ib1f9d)
إصلاح الأخطاء
- تم إصلاح الخطأ
IndexOutOfBoundsException: Inconsistency detectedالذي يظهر أحيانًا عند استخدام واجهات برمجة تطبيقات الإصدار 2 منDataSourceمن خلال مسارات التوافق - تم الآن إطلاق طلب
isInvalidأثناء عملية تهيئةDataSourceبشكلٍ صحيح على 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، يتم تجاهل 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.إذا كنت تختبر 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) - تم إصلاح الخطأ الذي كان يؤدي إلى عرض القائمة السابقة (القديمة) ضمن تعديلات ListUpdateCallback في واجهات برمجة التطبيقات من جهة مقدّم العرض، مثل .snapshot() و.peek() وما إلى ذلك.
- تم إصلاح خلل كان يؤدي إلى عدم إضافة عوامل تشغيل الفواصل لرؤوس أو تذييلات عند استخدامها مع RemoteMediator
- تم إصلاح خطأ يتعلّق بتوقُّف تعديلات LoadState إلى NotLoading لـ RemoteMediator في حالة التحميل
- تم إصلاح خلل في واجهة برمجة التطبيقات المتوافقة مع Paging2.0، وهي
.asPagingSourceFactory()، حيث كان من الممكن أن تؤدي إلى بدء تشغيلDataSourceالاحتياطية على CoroutineDispatcher غير صحيح. يؤدي ذلك إلى حلّ مشكلة تعطُّل التطبيق وحالات 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 لعمليات رد الاتصال الخاصة بإبطال صحة البيانات بعد تحويلها باستخدام.mapأو.mapByPage. (I1f244، b/165313046)
إصلاح الأخطاء
- تم تحسين تفاعل مكتبة Paging مع ViewPager بشكل كبير. على وجه التحديد، لن تلغي مكتبة Paging بعد الآن طلب
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 هذه التعديلات.
إصلاح الأخطاء
- أصبحت ميزة Paging تجلب مسبقًا الصفحات بشكل صحيح حتى عندما تتم فلترة البيانات المعروضة بشكل كبير
- لم يعُد عرض
LoadResult.Errorفي عملية تحميل تمت إعادة محاولتها يؤدي إلى إعادة تشغيل إعادة المحاولة بشكل غير صحيح عند الوصول إلى العناصر
المساهمة الخارجية
- نشكر "كلارا ف" على مساعدتنا في إخلاء مساحة لبعض الاختبارات. (549612)
الإصدار 3.0.0-alpha04
5 أغسطس 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha04. يتضمّن الإصدار 3.0.0-alpha04 هذه التعديلات.
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة واجهة برمجة التطبيقات
peek()إلىAsyncPagingDataDifferوPagingDataAdapterللسماح بالوصول إلى البيانات المعروضة بدون الحاجة إلى تحميل الصفحات. (I38898، b/159104197) - تمت إضافة واجهة برمجة تطبيقات
snapshot()إلىPagingDataAdapterوAsyncPagingDataDifferللسماح باسترداد العناصر المعروضة بدون بدء عملية جلب الصفحة. (I566b6، b/159104197) - تمت إضافة دالة إنشاء
PagingData.from(List<T>)للسماح بعرض القوائم الثابتة التي يمكن دمجها مع تدفق PagingData العام لعرض القوائم الثابتة في حالات معيّنة، على سبيل المثال، قبل انتهاء عملية REFRESH الأولية أو ببساطة لاختبار عمليات التحويل. (Id134d) - تم إيقاف واجهات برمجة التطبيقات dataRefresh Flow / Listener نهائيًا لأنّها كانت تهدف إلى عرض حالة العناصر المعروضة في REFRESH، ولكن مع التحسينات التي تم إجراؤها على توقيت استدعاء loadState Flow / Listener وسمة itemCount، أصبحت هذه الواجهات زائدة عن الحاجة (Ia19f3)
- تمت إضافة برامج تضمين متوافقة مع RxJava3 لكل من
PagingSourceوRemoteMediator(I49ef3، b/161480176)
إصلاح الأخطاء
PositionalDataSourceconverted intoPagingSourceviatoPagingSourceFactoryhelper, includingPagingSourcegenerated by Room now correctly mark themselves to support jumping. (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)
- تم إخفاء خيارات دالة الخريطة DataSource kotlin من Java، وذلك لحلّ الالتباس بين الخيارات الأصلية وخيارات kotlin. (If7b23، b/161150011)
- تم وضع العلامة @JvmSynthetic على واجهات برمجة التطبيقات المكرّرة التي تهدف إلى تسهيل استخدام لغة Kotlin (I56ae5).
- تمت إضافة عمليات تحميل زائدة لدالة الإنشاء LoadResult.Page التي تضبط itemsBefore وitemsAfter تلقائيًا على COUNT_UNDEFINED (I47849)
- تم تعديل عوامل تشغيل PagingData الحالية لتتوافق مع طرق تعليق التنفيذ، وتمت إضافة عوامل تشغيل mapSync وflatMapSync وfilterSync الجديدة غير المعلقة للمستخدمين الذين يستعملون Java. تم نقل طرق التحويل الحالية إلى دوال الإضافة، لذا سيحتاج مستخدمو Kotlin الآن إلى استيرادها. (I34239، b/159983232)
إصلاح الأخطاء
- ستعرض الآن مصادر PagingSource الخاصة بـ 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)
إصلاح الأخطاء
- يتحقّق أداة التنقّل بين الصفحات الآن من إعادة استخدام PagingSource في المصنع، وذلك لمنع إعادة الاستخدام غير المقصود لـ PagingSource غير الصالحة، ما يؤدي إلى ظهور خطأ غير واضح (I99809، b/158486430).
- لم تعُد حالات تعذُّر تحميل RemoteMediator REFRESH تمنع تحميل PagingSource (I38b1b، b/158892717)
- لم يعُد الإصدار غير المعلّق من
submitDataيتسبب في حدوث عطل بسبب الجمع المتزامن على عدةPagingDataعند استدعائه بعد الإصدار المعلّق منsubmitData. (I26358، b/158048877) - تم إصلاح الاستثناء "لا يمكن جمع البيانات مرّتين من أداة عرض الصفحات" الذي كان يمكن أن يحدث بعد تغيير الإعداد (I58bcc، b/158784811)
الإصدار 3.0.0-alpha01
10 يونيو 2020
تم طرح androidx.paging:paging-*:3.0.0-alpha01. يتضمّن الإصدار 3.0.0-alpha01 هذه التعديلات.
تم تعديل مكتبة Paging Library إلى الإصدار 3.0، وذلك لتفعيل العديد من الميزات الجديدة الرئيسية.
الميزات الجديدة في الإصدار 3.0
- دعم من الدرجة الأولى لـ Kotlin coroutines و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من مكتبة Paging إصلاحًا لمشكلة توسيط التحميل تم إصداره في الإصدار 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 من مكتبة Paging بدون أي تغييرات عن الإصدار 2.1.0-rc01.
الإصدار 2.1.0-rc01
6 ديسمبر 2018
تم إصدار الإصدار 2.1.0-rc01 من مكتبة Paging بدون أي تغييرات عن الإصدار 2.1.0-beta01.
الإصدار 2.1.0-beta01
1 نوفمبر 2018
تم إصدار الإصدار 2.1.0-beta01 من مكتبة Paging بدون أي تغييرات عن الإصدار 2.1.0-alpha01.
الإصدار 2.1.0-alpha01
12 أكتوبر 2018
تتضمّن ميزة Paging 2.1.0-alpha01 إضافتين رئيسيتين، وهما إمكانية حذف الصفحات ومكتبات إضافة KTX لكل عنصر، بالإضافة إلى العديد من التغييرات الأخرى في واجهة برمجة التطبيقات وإصلاحات الأخطاء.
التغييرات في واجهة برمجة التطبيقات
- تمت إضافة
PagedList.Config.Builder.setMaxSize()للحدّ من عدد العناصر المحمَّلة في الذاكرة. - تمت إضافة
androidx.paging.Config()كبديل للغة Kotlin عنPagedList.Config.Builder - تمت إضافة
androidx.paging.PagedList()كبديل للغة Kotlin عنPagedList.Builder - تمت إضافة
DataSourceFactory.toLiveData()كبديل Kotlin لـLivePagedListBuilder - تمت إضافة
DataSourceFactory.toObservable()وtoFlowable()كبديلَين للغة Kotlin عنRxPagedListBuilder - تمت إضافة
AsyncPagedListDiffer.addPagedListListener()للاستماع إلى وقت تبديل PagedList. b/111698609 - تمت إضافة صيغة
PagedListAdapter.onCurrentListChanged()التي تمرّر القائمة القديمة والجديدة، وتم إيقاف الصيغة السابقة نهائيًا. - تمت إضافة صيغ
PagedListAdapter/AsyncPagedListDiffer.submitList()التي تستخدم دالة رد اتصال إضافية يتم تشغيلها إذا/عند عرض pagedlist، بعد المقارنة. يتيح لك ذلك مزامنة تبديل 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 من Paging مع إصلاح خطأ واحد في runtime. ننصحك بشدة باستخدام 1.0.1 لتحقيق الثبات. تم أيضًا إصدار Paging RxJava2 1.0.1، وهو مطابق لـ 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 الإصدار المحتمل من مكتبة Paging
ليس لدينا أي مشاكل معروفة أخرى أو ميزات جديدة من المقرّر طرحها في إصدار 1.0.0 الخاص بميزة "التقسيم إلى صفحات". يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1 ومساعدتنا في اختباره بدقة لنتمكّن من طرح إصدار 1.0.0 قوي.
لا يتضمّن هذا الإصدار أي تغييرات، فهو مماثل للإصدار 1.0.0-beta1.
الإصدار 1.0.0-beta1
5 أبريل 2018
ستكون مكتبة Paging في مرحلة تجريبية لفترة قصيرة قبل الانتقال إلى الإصدار المحتمل.
لا نخطّط لإجراء المزيد من التغييرات على واجهة برمجة التطبيقات في الإصدار Paging 1.0، كما أنّ معايير أي تغييرات على واجهة برمجة التطبيقات صارمة للغاية.
تم إصدار الإصدار الأولي من RxJava2 المتوافق مع ميزة Paging كوحدة اختيارية منفصلة (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الأولي على المنفّذ المحدّد، بدلاً من مجموعة سلاسل الإدخال/الإخراج في "مكوّنات بنية التطبيق".تم إصلاح سلوك الإبطال في أغلفة
DataSourceالداخلية (المستخدَمة لتنفيذDataSource.map، بالإضافة إلى تحميلPositionalDataSourceالذي تم إيقاف العنصر النائب فيه) b/77237534
الإصدار 1.0.0-alpha7
21 مارس 2018
تم طرح الإصدار 1.0.0-alpha7 من Paging مع الإصدار 1.1.1 من Lifecycles. بما أنّ الإصدار alpha7 من Paging يعتمد على نقل فئة Function المذكورة أعلاه، عليك تعديل تبعية lifecycle:runtime إلى android.arch.lifecycle:runtime:1.1.1.
من المقرّر أن يكون الإصدار alpha7 من Paging هو الإصدار النهائي قبل إطلاق الإصدار التجريبي من Paging.
التغييرات في واجهة برمجة التطبيقات
- أصبحت كائنات
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من واجهة إلى فئة مجرّدة لتفعيل وظيفة الخريطة.
إصلاح الأخطاء
- تم تغيير Builders لتكون نهائية. 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