صفحهبندی
این جدول همه آرتیفکتهای گروه androidx.paging را فهرست میکند.
| آرتیفکت | نسخه پایدار | نامزد انتشار | انتشار نسخه بتا | نسخه آلفا |
|---|---|---|---|---|
| paging-* | ۳.۵.۳ | - | - | - |
| paging-compose | ۳.۵.۳ | - | - | - |
اعلام وابستگیها
برای افزودن وابستگی به «صفحهبندی»، باید مخزن Google Maven را به پروژهتان اضافه کنید. برای اطلاعات بیشتر، مخزن Maven در Google را بخوانید.
وابستگیهای مصنوعات موردنیازتان را در فایل build.gradle برای برنامه یا واحدتان اضافه کنید:
شیک
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" }
کاتلین
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 را ببینید.
نسخه ۳.۵
نسخه ۳.۵.۳
۱۲ اکتبر ۲۰۲۶
androidx.paging:paging-*:3.5.3 منتشر شد. نسخه ۳.۵.۳ حاوی این ثبتها است.
رفع اشکالها
- وقتی
RemoteMediatorبه انتهای صفحهبندی در هر دو جهت برسد و «سرایند» یا «پاورقی» به جداکننده پایانی تبدیل شود،ItemSnapshotListFlowدیگرIllegalArgumentExceptionرا پرتاب نخواهد کرد. (I821c7، b/566336825) - وقتی صفحه بارشده از
PagingConfig.maxSizeفراتر رود، تعداد صفحههای بارشده به کمتر از دو صفحه کاهش نخواهد یافت تا اطمینان حاصل شود که درگاه دید بهدرستی با دادهها پر شده است. (I037a0، b/565835910)
همیاری خارجی
از Igor برای ارسال رفع اشکال b/565835910 سپاسگزاریم
نسخه ۳.۵.۲
۷ اکتبر ۲۰۲۶
androidx.paging:paging-*:3.5.2 منتشر شد. نسخه ۳.۵.۲ حاوی این ثبتها است.
رفع اشکالها
Pager.append()تماسهای قبلاز تکمیل بازآوری اولیه دیگرNoSuchElementExceptionرا نشان نخواهد داد. The append call will be no-op. (Ide387, b/556780796)
نسخه ۳.۵.۱
۱۲ اوت ۲۰۲۶
androidx.paging:paging-*:3.5.1 منتشر شد. نسخه ۳.۵.۱ شامل این تعهدات است.
رفع اشکالها
PagingSource.getRefreshKeyکهanchorPositionنادرستی را ارائه میکرد که هنگام بازآوری صفحه با جداکنندهها درحین پیمایش به جایبانها بسیار بزرگ بود، برطرف شد. (I475f0, b/516565503)
نسخه ۳.۵.۰
۶ مه ۲۰۲۶
androidx.paging:paging-*:3.5.0 منتشر شد. نسخه ۳.۵.۰ حاوی این ثبتها است.
تغییرات مهم از نسخه ۳.۴.۰:
عملگر
Flow<PagingData>.asItemSnapshotListFlowبرای تبدیلFlow<PagingData>بهFlow<ItemSnapshotList>اضافه شد. این یعنی اکنون میتوان به دادههای بارشده خارج از لایه UI دسترسی داشت و به شما امکان میدهدFlow<ItemSnapshotList>را با منابع داده دیگر ترکیب کنید، دادههای صفحهبندیشده را بهصورت محلی در حافظه نهان ذخیره و اصلاح کنید، یا دادههای صفحهبندیشده را بهعنوان بخشی از وضعیت UI آشکار کنید و کارهای دیگری انجام دهید.توابع افزونه
Pager.appendوPager.prependاضافه شد تا دادههای بیشتری را بدون پیمایش بهصورت دستی بار کنید.توابع افزونه
Pager.refreshوPaging.retryبرای بازیابی از خطاهای بارگیری هنگام استفاده ازasItemSnapshotListFlowAPI اضافه شد.
نسخه 3.5.0-rc01
۲۲ آوریل ۲۰۲۶
androidx.paging:paging-*:3.5.0-rc01 منتشر شد. نسخه 3.5.0-rc01 حاوی این موارد ارسال است.
بدون تغییر
- تغییر قابلتوجهی نسبت به نسخه
3.5.0-beta01وجود ندارد.
نسخه 3.5.0-beta01
۸ آوریل ۲۰۲۶
androidx.paging:paging-*:3.5.0-beta01 منتشر شد. نسخه 3.5.0-beta01 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- نام
Flow<PagingData>.asStateAPI بهFlow<PagingData>.asItemSnapshotListFlowتغییر کرده است (I0dc11، b/496548025)
نسخه 3.5.0-alpha01
۱۱ مارس ۲۰۲۶
androidx.paging:paging-*:3.5.0-alpha01 منتشر شد. نسخه 3.5.0-alpha01 شامل این تعهدها است.
ویژگیهای جدید
عنصر
paging-commonاکنون حاوی یک عامل جریانasStateجدید درFlow<PagingData>است تا آن را بهFlow<ItemSnapshotList>تبدیل کند. این کار قابلیتهایی مانند موارد زیر را باز میکند:- ترکیب کردن جریان
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) { ... } }- ترکیب کردن جریان
مصنوع
paging-commonهمچنین میاناهای برنامهسازی کاربردیPager.appendوPager.prependرا اضافه کرده است تا بارگیریها را بهصورت دستی در هریک از لبههای موارد بارشده راهاندازی کند.- وقتی با
paging-runtimeیاpaging-composeاستفاده میشود، علاوهبر پیمایش، روش دیگری برای بار کردن دادههای بیشتر ارائه میدهد - وقتی با
asStateAPI جدید استفاده شود، تنها راه بار کردن دادههای بیشتر است
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برای بازیابی از خطاهای بارگیری هنگام استفاده ازasStateAPI اضافه شد. برای نمونههای بیشتر استفاده از میاناهای برنامهسازی کاربردی جدید، این سند را ببینید. (I1e1e9، If3c87، Idbd48، Id1e1d، I816fe)
نسخه ۳.۴
نسخه ۳.۴.۲
۱۱ مارس ۲۰۲۶
androidx.paging:paging-*:3.4.2 منتشر شد. نسخه ۳.۴.۲ شامل این تعهدات است.
بدون تغییر
- این نسخه در مقایسه با نسخه ۳.۴.۱ هیچ تغییری در رفتار یا میانای برنامه کاربردی ندارد.
نسخه ۳.۴.۱
۱۱ فوریه ۲۰۲۶
androidx.paging:paging-*:3.4.1 منتشر شد. نسخه ۳.۴.۱ حاوی این ثبتها است.
بهروزرسانی وابستگی
- وابستگی guava مربوط به paging-guava از نسخه ۳۱.۱ به ۳۲.۰.۱ بهروز شد.
نسخه ۳.۴.۰
۲۸ ژانویه ۲۰۲۶
androidx.paging:paging-*:3.4.0 منتشر شد. نسخه ۳.۴.۰ حاوی این ثبتها است.
تغییرات مهم از نسخه ۳.۳.۰:
- هدفهای KMP بیشتری به
paging-common،paging-testing، وpaging-composeاضافه شد. در مجموع، همه آنها اکنون از JVM(Android و رایانه)، Native (Linux، iOS، watchOS، tvOS، macOS، MinGW)، و Web (JavaScript، WasmJS) پشتیبانی میکنند -
paging-common،paging-testing، وpaging-composeپشتیبانی ازmacosX64،iosX64،watchosX64، وtvosX64را برای همراستایی با منسوخ شدن هدفهای macosX64 توسط Jetbrains برداشته است. - میانای برنامهسازی کاربردی جدید
PagingStateclosestItemAroundPositionبرای بازیابی مورد بارگیریشدهای که به موقعیت هدف نزدیکتر است و با گزاره ورودی مطابقت دارد اضافه شد. از این میتوان برای تولید کلیدهای بازآوری براساس مورد استفاده کرد، درصورتیکه مورد لنگرپذیر ایدهآل در اطراف موقعیت هدف دقیق باشد اما در آن نباشد.
نسخه 3.4.0-rc01
۱۴ ژانویه ۲۰۲۶
androidx.paging:paging-*:3.4.0-rc01 منتشر شد. نسخه 3.4.0-rc01 حاوی این commitها است.
ویژگیهای جدید
- پشتیبانی از پلاتفرمهای KMP زیر برداشته شد:
macosX64،iosX64،watchosX64، وtvosX64برای همراستا شدن با منسوخ شدن هدفهای macosX64 توسط Jetbrains. (7cb9a4)
نسخه 3.4.0-beta01
۱۷ دسامبر ۲۰۲۵
androidx.paging:paging-*:3.4.0-beta01 منتشر شد. نسخه 3.4.0-beta01 شامل این تعهدات است.
رفع اشکالها
- Fix race between
RecyclerViewandRefreshloads leading toIndexOutOfBoundsExceptioninRecyclerView. بهروزرسانیهای منقطع واسط کاربر بهدلیل بارگیریهای مداومRefreshمیتواند باعث شود وضعیت «صفحهبندی» باRecyclerViewهمگامسازی نشود. این مشکل با بازنشانی «صفحهبندی» به وضعیت قبلاز «بازآوری» درصورت قطع شدن «بازآوری» (یعنی با بارRefreshمتوالی) برطرف میشود. (I771b0، b/409809768)
نسخه 3.4.0-alpha04
۱۰ سپتامبر ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha04 منتشر شد. نسخه 3.4.0-alpha04 حاوی این موارد ثبت است.
تغییرات میانای برنامهسازی کاربردی
PagingStateAPIclosestItemAroundPositionجدیدی برای بازیابی مورد بارشده که به موقعیت هدف نزدیکتر است و با گزاره ورودی مطابقت دارد اضافه شد. از این ویژگی میتوان برای تولید کلیدهای بازآوری مبتنی بر مورد استفاده کرد، جایی که مورد قابللنگراندازی ایدهآل در اطراف موقعیت هدف دقیق قرار دارد اما دقیقاً در آن موقعیت نیست. (I96e5c، b/440187139)
نسخه 3.4.0-alpha03
۲۷ اوت ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha03 منتشر شد. نسخه 3.4.0-alpha03 حاوی این ارسالها است.
ویژگیهای جدید
- Paging-common رایانه را بهعنوان هدف جدید Kotlin Multiplatform (KMP) اضافه کرده است. در مجموع، اکنون از JVM(Android و رایانه)، Native (Linux، iOS، watchOS، tvOS، macOS، MinGW)، و Web (JavaScript، WasmJS) پشتیبانی میکند. (Id2483، b/436884811)
- هدفهای جدید «چندپلاتفرمی Kotlin» (KMP) به آزمایش صفحهبندی اضافه شده است. در مجموع، اکنون از JVM(Android و رایانه)، Native (Linux، iOS، watchOS، tvOS، macOS، MinGW)، و Web (JavaScript، WasmJS) پشتیبانی میکند. (I0c543، b/435014650)
- Paging-compose هدفهای جدید Kotlin چندپلاتفرمی (KMP) را اضافه کرده است. درمجموع، اکنون از JVM(Android و رایانه)، Native (Linux، iOS، watchOS، tvOS، macOS، MinGW)، و وب (JavaScript، WasmJS) پشتیبانی میکند. (I70d44، b/436884801)
تغییرات میانای برنامهسازی کاربردی
- انتقال minSdk پیشفرض از میانای برنامهسازی کاربردی ۲۱ به میانای برنامهسازی کاربردی ۲۳ (Ibdfca، b/380448311، b/435705964، b/435705223)
نسخه 3.4.0-alpha02
۳۰ ژوئیه ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha02 منتشر شد. نسخه 3.4.0-alpha02 حاوی این ارسالها است.
تغییرات میانای برنامهسازی کاربردی
PagingData.fromاکنون اجازه میدهدplaceholdersBeforeوplaceholdersAfterرا تنظیم کنید. توجه داشته باشید که پیمایش در این جایبانها باعث بارگیری نمیشود. (I06983)
نسخه 3.4.0-alpha01
۲ ژوئیه ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha01 منتشر شد. نسخه 3.4.0-alpha01 حاوی این ارسالها است.
ویژگیهای جدید
- «صفحهبندی» هدفهای KMP زیر را اضافه کرده است: watchos، tvos، mingwX64، watchosDeviceArm64، و linuxArm64. (I237dd، Ia62b3، b/368046982، Icf15d، b/364652024، I139d3، b/338268719)
رفع اشکالها
- آزمایشهای واحد Android که Paging 3.3 یا نسخههای جدیدتر را فراخوانی میکنند دیگر از
PagingLoggerاستثنا پرتاب نمیکنند (Ia9400، b/331684448) - اشکالی که در آن
RecyclerViewهنگام پیمایش کاربر درحین بهروزرسانیRecyclerView،IndexOutOfBoundsExceptionرا پرتاب میکرد برطرف شد (Id1f16، b/381024738) - اشکالی که باعث میشد صفحهبندی نتواند بار کردنهای بیشتر را هنگام بازآوری درحین پیمایش راهاندازی کند برطرف شد. (I60ca5، b/352586078)
- مشکل ازکارافتادن هنگام پیمایش درحین بازآوری موارد «صفحهبندی» برطرف شد. (I8c65a، b/347649763)
نسخه ۳.۳
نسخه ۳.۳.۶
۱۲ فوریه ۲۰۲۵
androidx.paging:paging-*:3.3.6 منتشر شد. نسخه ۳.۳.۶ حاوی این ثبتها است.
رفع اشکالها
- سیگنالهای بازآوری و تکرار ارسالشده درطول بازآوری اولیه اکنون ذخیره میشوند و بهمحض آماده شدن ارائهدهنده صفحهبندی، بهطور خودکار دوباره ارسال میشوند.
همیاری خارجی
نسخه ۳.۳.۵
۱۱ دسامبر ۲۰۲۴
androidx.paging:paging-*:3.3.5 منتشر شد. نسخه ۳.۳.۵ شامل این تعهدات است.
رفع اشکالها
- اشکالی برطرف شد که در آن
RecyclerViewهنگام پیمایش کاربر درحین بهروزرسانیRecyclerView،IndexOutOfBoundsExceptionرا پرتاب میکرد. (Id1f16، b/381024738)
نسخه ۳.۳.۴
۱۳ نوامبر ۲۰۲۴
androidx.paging:paging-*:3.3.4 منتشر شد. نسخه ۳.۳.۴ حاوی این ثبتها است.
رفع اشکالها
- آزمایشهای واحد Android که Paging 3.3 یا نسخههای جدیدتر را فراخوانی میکنند دیگر خطایی مثل
Method isLoggable in android.util.Log not mockedرا ایجاد نمیکنند. (Ia9400، b/331684448)
نسخه ۳.۳.۲
۷ اوت ۲۰۲۴
androidx.paging:paging-*:3.3.2 منتشر شد. نسخه ۳.۳.۲ حاوی این ثبتها است.
ویژگیهای جدید
-
paging-commonوpaging-testingهدفهای جدید Kotlin-Multiplatform را اضافه کردهاند:watchos،tvos، وlinuxArm64(90c9768)، (53e0eca)
نسخه ۳.۳.۱
۲۴ ژوئیه ۲۰۲۴
androidx.paging:paging-*:3.3.1 منتشر شد. نسخه ۳.۳.۱ حاوی این ثبتها است.
رفع اشکالها
- رفع مشکلی که در آن
AsyncPagingDataDifferیا میاناهای برنامهسازی کاربردی ساختهشده روی آن مثلPagingDataAdapterاستفادهشده باRecyclerViewنمیتوانست بارگذاریهای بیشتری را وقتی منبع داده پشتیبان درحین پیمایش بازآوری میشد راهاندازی کند. (I60ca5، b/352586078) - رفع خرابیای که هنگام برداشتن موارد از منبع داده پشتیبان درحین پیمایش
RecyclerViewبااستفاده ازPagingDataAdapterیاAsyncPagingDataDifferرخ میداد. (I8c65a، b/347649763)
نسخه ۳.۳.۰
۱۴ مه ۲۰۲۴
androidx.paging:paging-*:3.3.0 منتشر شد. نسخه ۳.۳.۰ حاوی این ثبتها است.
تغییرات مهم از نسخه ۳.۲.۰
PagingDataPresenterاکنون کلاس عمومی است. اکنون میتوان ارائهدهندگان چندپلاتفرمی را بهجای نیاز به میاناهای برنامهسازی کاربردی صفحهبندی داخلی یاAsyncPagingDataDifferpaging-runtime، رویPagingDataPresenterساخت.- روشهای کمکی جدید
LoadStatesوCombinedLoadStatesدرhasErrorوisIdleاضافه شد تا بررسی شود که آیاLoadStatesبهترتیب در وضعیت «خطا» یاNotLoadingاست یا نه. همچنین روش افزونه Kotlin جدیدی بهawaitNotLoading()درFlow<CombinedLoadStates>اضافه شد که تا زمانی که بارگذاری در حالتNotLoadingیا «خطا» قرار گیرد منتظر میماند. PagingData.empty()اکنون بهطور پیشفرض حالتهایNotLoadingرا ارسال میکند، مگراینکهLoadStatesسفارشی به سازنده آن منتقل شود. این با رفتار فعلی که در آنLoadStatesهنگام ارسال بهPagingDataAdapterارسال نمیشود یا حالتهای «درحال بار کردن» را هنگام جمعآوری بهعنوانLazyPagingItemsارسال میکند، متفاوت است. وقتی بهعنوانLazyPagingItemsجمعآوری میشود، اکنون بلافاصله پساز ترکیببندی اولیه، فهرست خالی را نیز نمایش میدهد.
سازگاری Kotlin چندپلاتفرمی
اکنون Paging مصنوعات سازگار با Kotlin Multiplatform را ارسال میکند، که بخش عمدهای از آن بهلطف کار بالادستی از پروژه multiplatform-paging CashApp است.
-
paging-commonهمه میاناهای برنامهسازی کاربردی Paging 3 را بهcommonمنتقل کرده است و اکنون علاوهبر Android با jvm و iOS نیز سازگار است. -
paging-testingکد خود را بهcommonمنتقل کرده است و اکنون علاوهبر Android با jvm و iOS نیز سازگار است. paging-composeکد خود را بهcommonمنتقل کرده است و یک آرتیفکت Android را ارسال میکند که با پشتیبانی چندپلاتفرمیandroidx.composeمطابقت دارد.-
paging-runtime،paging-guava،paging-rxjava2، وpaging-rxjava3فقط برای Android باقی خواهند ماند.
نسخه ۳.۳.۰-rc۰۱
۱ مه ۲۰۲۴
androidx.paging:paging-*:3.3.0-rc01 بدون هیچ تغییری در Paging 3.3.0-beta01 منتشر شد. نسخه 3.3.0-rc01 حاوی این کدهای تاییدشده است.
نسخه 3.3.0-beta01
۳ آوریل ۲۰۲۴
androidx.paging:paging-*:3.3.0-beta01 بدون تغییرات قابلتوجهی منتشر شده است. نسخه 3.3.0-beta01 حاوی این ارسالها است.
نسخه 3.3.0-alpha05
۲۰ مارس ۲۰۲۴
androidx.paging:paging-*:3.3.0-alpha05 منتشر شد. نسخه 3.3.0-alpha05 شامل این تغییرات است.
تغییرات میانای برنامهسازی کاربردی
- اکنون «صفحهبندی» از دستورات AndroidX Annotation
@MainThreadبرای کد مشترک استفاده میکند. (I78f0d، b/327682438)
نسخه 3.3.0-alpha04
۶ مارس ۲۰۲۴
androidx.paging:paging-*:3.3.0-alpha04 منتشر شد. نسخه 3.3.0-alpha04 حاوی این موارد ثبت است.
رفع اشکالها
- خطاهای جزئی مستندات مربوط به افزودن سازگاری چندپلاتفرمی Kotlin برطرف شد. (aosp/2950785)
نسخه ۳.۳.۰-alpha03
۷ فوریه ۲۰۲۴
androidx.paging:paging-*:3.3.0-alpha03 منتشر شد. نسخه 3.3.0-alpha03 حاوی این commitها است.
ویژگیهای جدید
PagingDataPresenterاکنون کلاس عمومی است. اکنون میتوان ارائهدهندههای چندپلاتفرمی را بهجای نیاز به میاناهای برنامهسازی کاربردی صفحهبندی داخلی یاAsyncPagingDataDifferpaging-runtime، رویPagingDataPresenterساخت. (Id1f74، b/315214786)- روشهای کمکی جدید
LoadStatesوCombinedLoadStatesبرای بررسی اینکه آیاLoadStatesدر وضعیت «خطا» یاNotLoadingاست اضافه شد. همچنین یک API جدید اضافه شد که تا زمانی که بار در وضعیتNotLoadingیا «خطا» قرار گیرد، درLoadStateFlowمنتظر میماند. (Id6c67)
تغییر رفتار
PagingData.empty()اکنون بهطور پیشفرض حالتهایNotLoadingرا ارسال میکند، مگراینکهLoadStatesسفارشی به سازنده آن منتقل شود. این با رفتار فعلی که در آنLoadStatesهنگام ارسال بهPagingDataAdapterارسال نمیشود یا حالتهای «درحال بار کردن» را هنگام جمعآوری بهعنوانLazyPagingItemsارسال میکند، متفاوت است. وقتی بهعنوانLazyPagingItemsجمعآوری میشود، اکنون بلافاصله پساز ترکیب اولیه، فهرست خالی را نیز نمایش میدهد. (I4d11d، b/301833847)
نسخه 3.3.0-alpha02
۲۰ سپتامبر ۲۰۲۳
androidx.paging:paging-*:3.3.0-alpha02 منتشر شد. نسخه 3.3.0-alpha02 حاوی این commit-ها است.
سازگاری Kotlin چندپلاتفرمی
اکنون Paging مصنوعات سازگار با Kotlin Multiplatform را ارائه میدهد که بخش عمده آن بهلطف کار بالادستی از پروژه multiplatform-paging CashApp است. این کار به ما کمک میکند از واگرایی بین دو مخزن جلوگیری کنیم و آنها را سازگار نگه داریم.
-
paging-commonهمه «میاناهای برنامهسازی کاربردی» Paging 3 را بهcommonمنتقل کرده است و اکنون علاوهبر Android، با jvm و iOS نیز سازگار است. -
paging-testingکد خود را بهcommonمنتقل کرده است و اکنون علاوهبر Android با jvm و iOS نیز سازگار است. paging-composeکد خود را بهcommonمنتقل کرده است و یک آرتیفکت Android را ارسال میکند که با پشتیبانی چندپلاتفرمیandroidx.composeمطابقت دارد.-
paging-runtime،paging-guava،paging-rxjava2، وpaging-rxjava3فقط در Android دردسترس خواهند بود.
تغییرات میانای برنامهسازی کاربردی
- میانای عمومی Logger که فقط برای استفاده داخلی درنظر گرفته شده بود منسوخ شده است (I16e95، b/288623117)
همیاری خارجی
- از veyndan از Cash App بهخاطر کمک به انتقال «صفحهبندی» به «پلاتفرم چندگانه Kotlin» سپاسگزاریم (#560، #561، #562، #573، #576، #577، #578، #579، #580، #581، #583، #584، #586، #609)
نسخه 3.3.0-alpha01
۲۰ سپتامبر ۲۰۲۳
- این اولین نسخه پخش چندسکویی کتابخانههای androidx.paging است. این نسخه فقط آرتیفکتهای
*-jvmو*-androidرا دارد. برای انواع macOS، iOS، و linux، از3.3.0-alpha02استفاده کنید.
نسخه ۳.۲
نسخه ۳.۲.۱
۶ سپتامبر ۲۰۲۳
androidx.paging:paging-*:3.2.1 منتشر شد. نسخه ۳.۲.۱ حاوی این تعهدات است.
رفع اشکالها
- مشکل مربوط به API
asSnapshot()در مصنوع Paging Testing برطرف شد که در آن، وقتی Flow ساختهشده بااستفاده ازPagingData.from(List)ارسال میشد، APIasSnapshot()متوقف میشد زیرا هیچ اطلاعاتی درباره زمان پایان بارگیری نداشت (برخلاف سربارگذاریPagingData.from(List, LoadStates)). این راهکار موقت فقط برای «جریانهای کاری» تکمیلشدنی (برای نمونه،flowOf(PagingData.from(...))) کار میکند. برای «جریانهای کاری» تکمیلنشدنی (برای نمونه،MutableStateFlow، از سربارPagingData.fromکهLoadStatesرا ارائه میدهد استفاده کنید). (I502c3) - Paging Compose اکنون بهطور داخلی از
AndroidUiDispatcher.Mainاستفاده میکند تا مطمئن شود دادههای جدید در همان قاب تکمیل بارگیری دردسترس است. (Ia55af)
نسخه ۳.۲.۰
۲۶ ژوئیه ۲۰۲۳
androidx.paging:paging-*:3.2.0 منتشر شد. نسخه ۳.۲.۰ حاوی این ثبتها است.
تغییرات مهم از نسخه ۳.۱.۰
- «صفحهبندی نوشتن» به پایداری «میانای برنامهسازی کاربردی» رسیده است و با بقیه «صفحهبندی» ادغام شده است و اکنون نسخه آن با همه عناصر دیگر «صفحهبندی» مطابقت دارد. تغییرات از نسخه ۳.۱.۰ شامل موارد زیر است:
- پشتیبانی از پیشنمایش فهرست دادههای جعلی با ایجاد
PagingData.from(fakeData)و پیچیدن آنPagingDataدرMutableStateFlow(برای نمونهMutableStateFlow(PagingData.from(listOf(1, 2, 3)))). این جاریسازی را بهعنوان گیرنده برایcollectAsLazyPagingItems()به@Previewعنصر ترکیبی ارسال کنید تا پیشنمایش شود. - پشتیبانی از همه چیدمانهای تنبل مانند
LazyVerticalGridوHorizontalPagerو همچنین مؤلفههای تنبل سفارشی از کتابخانههای Wear و TV. این امر ازطریق روشهای افزونهLazyPagingItemsسطح پایینتر جدیدitemKeyوitemContentTypeبهدست آمد که به شما کمک میکند پارامترهایkeyوcontentTypeرا در میاناهای برنامهسازی کاربردی استانداردitemsکه ازقبل برایLazyColumn،LazyVerticalGridو همچنین معادلهای آنها در میاناهای برنامهسازی کاربردی مانندHorizontalPagerوجود دارند پیادهسازی کنید. items(lazyPagingItems)وitemsIndexed(lazyPagingItems)که فقط ازLazyListScopeپشتیبانی میکنند منسوخ شدهاند.
- پشتیبانی از پیشنمایش فهرست دادههای جعلی با ایجاد
- ساخته جدید
paging-testingکه میاناهای برنامهسازی کاربردیای را ارائه میدهد که برای آزمایش واحد هر لایه از برنامه شما و ادغام آن با «صفحهبندی» بهصورت مجزا طراحی شدهاند. برای مثال، شامل موارد زیر استTestPagerکلاس که به شما امکان میدهد رفتار پیادهسازیPagingSourceسفارشی خود را مستقل از Pager و میانای کاربر واقعی اعتبارسنجی کنید.-
asPagingSourceFactoryمیاناهای برنامهسازی کاربردی برای تبدیلFlow<List<Value>>یاList<Value>ایستا بهPagingSourceFactoryکه میتواند در آزمایشها به «صفحهبندی» منتقل شود - افزونه
asSnapshotKotlin درFlow<PagingData<Value>>کهFlow<PagingData<Value>>را بهList<Value>مستقیم ترجمه میکند.asSnapshot lambdaبه شما امکان میدهد تا ازطریق میاناهای برنامهسازی کاربردی مثلscrollToیاappendScrollWhile، واسط کاربر برنامهتان را تقلید کنید تا بتوانید در هر نقطهای از مجموعه دادههای صفحهبندیشدهتان، درست بودن عکس آنی دادهها را درستیسنجی کنید.
- گزارشهای پیشفرض برای نمایش اطلاعات اشکالزدایی «صفحهبندی» در دو سطح اضافه شد:
VERBOSEوDEBUG. گزارشهای رویداد را میتوان ازطریق فرمانadb shell setprop log.tag.Paging [DEBUG|VERBOSE]فعال کرد. این مورد هم برای «صفحهبندی با نماها» و هم برای «صفحهبندی با نوشتن» اعمال میشود. - سازندههایی برای
PagingDataAdapterوAsyncPagingDataDifferاضافه شده است که بهجایCoroutineDispatcher،CoroutineContextرا میپذیرند. - میانای کاربردی
PagingSourceFactoryجدیدی اضافه شده است که سطح API صریحتری نسبتبه لامبداهای () ->PagingSourceقبلی ارائه میدهد. This factory can be used to instantiate a Pager.
نسخه 3.2.0-rc01
۲۱ ژوئن ۲۰۲۳
androidx.paging:paging-*:3.2.0-rc01 منتشر شد. نسخه 3.2.0-rc01 شامل این موارد است.
همیاری خارجی
- از Veyndan بهخاطر مشارکت در دور کردن «صفحهبندی» از ویژگیهای خاص Android/JVM سپاسگزاریم. (#553، #554، #555، #559)
نسخه 3.2.0-beta01
۷ ژوئن ۲۰۲۳
androidx.paging:paging-*:3.2.0-beta01 منتشر شد. نسخه 3.2.0-beta01 حاوی این commit-ها است.
Paging Compose
- «صفحهبندی Compose» رسماً به پایداری میانای برنامهسازی کاربردی رسیده است. به همین دلیل، نسخه از
1.0.0-alpha20بهروزرسانی شده است تا با نسخه سایر مصنوعات Paging مطابقت داشته باشد.
تغییرات میانای برنامهسازی کاربردی
- میاناهای برنامهسازی کاربردی منسوخشده
items(LazyPagingItems)وitemsIndexed(LazyPagingItems)را از «صفحهبندی Compose» برداشتیم. برای نمونهای از میاناهای برنامهسازی کاربردی جایگزین، یادداشتهای انتشار «صفحهبندی Compose»1.0.0-alpha20را ببینید. (I9626e)
نسخه 3.2.0-alpha06
۲۴ مه ۲۰۲۳
androidx.paging:paging-*:3.2.0-alpha06 منتشر شد. نسخه 3.2.0-alpha06 شامل این commit-ها است.
ویژگیهای جدید
- میانای کاربردی جدید
PagingSourceFactoryاضافه شد که سطح میانای برنامهسازی کاربردی صریحتری نسبتبه لامبداهای() -> 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)
تغییرات رفتار
- دیگر برای اجرای آزمایشهای
asSnapshot«صفحهبندی»، به توزیعکننده اصلی نیاز نیست. تنظیم آن دیگر هیچ تغییری در رفتار آزمایش ایجاد نمیکند. (Ie56ea)
نسخه 3.2.0-alpha05
۳ مه ۲۰۲۳
androidx.paging:paging-*:3.2.0-alpha05 منتشر شد. نسخه 3.2.0-alpha05 حاوی این ارسالها است.
تغییرات میانای برنامهسازی کاربردی
- اکنون میانای برنامهسازی کاربردی Paging Testing مربوط به
asSnapshotپارامترloadOperationsخود را بهطور پیشفرض روی لامبدای خالی تنظیم میکند. این کار امکان فراخوانیasSnapshotرا بدون ارسال هیچگونه عملیات بارگیری برای بازیابی دادهها از بارگیری بازآوری اولیه فراهم میکند. (Ied354، b/277233770)
بهبود مستندات
- اسناد مربوط به
asPagingSourceFactory()را بهروزرسانی کردیم تا مشخص شود که این یک روش افزونه درFlowاست که یک کارخانه قابلاستفاده مجدد برای تولید نمونههایPagingSourceبرمیگرداند. (I5ff4f، I705b5) - اسناد مربوط به سازنده
LoadResult.Pageبهروزرسانی شد تا نیاز به لغوitemsBeforeوitemsAfterبرای پشتیبانی از پرش شفافسازی شود. (Ied354)
همیاریهای خارجی
- از Veyndan بهخاطر مشارکت در دور کردن «صفحهبندی» از ویژگیهای خاص Android/JVM سپاسگزاریم. (#525, #523, #520, #519, #507, #506, #505, #499, #497, #496, #493)
نسخه 3.2.0-alpha04
۸ فوریه ۲۰۲۳
androidx.paging:paging-*:3.2.0-alpha04 منتشر شد. نسخه 3.2.0-alpha04 شامل این commit-ها است.
آزمایش صفحهبندی
- ساختافزار
paging-testingاکنون حاوی روشasPagingSourceFactoryبرای ایجادpagingSourceFactoryازFlow<List<Value>>است تا به «پیجر» ارائه شود. هرList<Value>>منتشرشده از «جریان» نشاندهنده تولید دادههای صفحهبندیشده است. این کار آزمایشهای صفحهبندی را، برای مثال، درPagingDataتبدیل با جعل منبع داده برای جمعآوری «صفحهبند» تسهیل میکند. (I6f230، b/235528239) paging-testingآرتیفکت با میاناهای برنامه کاربردی جدیدی که برای درستیسنجی دادههای موجود درFlow<PagingData<T>>مناسب است گسترش یافته است. برای مثال، میتوان از این برای تأیید بروندادFlow<PagingData<T>>از لایه ViewModel استفاده کرد.این کار ازطریق افزونه Kotlin
asSnapshotدرFlow<PagingData<Value>>انجام میشود کهFlow<PagingData<Value>>را بهList<Value>مستقیم ترجمه میکند. 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
۲۴ اکتبر ۲۰۲۲
androidx.paging:paging-*:3.2.0-alpha03 منتشر شد. نسخه 3.2.0-alpha03 شامل این commit-ها است.
آزمایش صفحهبندی
این نسخهٔ پخش حاوی آرتیفکت جدیدی است: paging-testing. این آرتیفکت میاناهای برنامهسازی کاربردیای ارائه میدهد که برای آزمایش واحد هر لایه از برنامه شما و ادغام آن با «صفحهبندی» بهصورت مجزا طراحی شدهاند.
برای مثال، این نسخه پخش اول شامل کلاس TestPager است که به شما امکان میدهد رفتار پیادهسازی PagingSource سفارشی خود را مستقل از Pager و میانای کاربر واقعی که معمولاً برای شبیهسازی ادغام «صفحهبندی» سرتاسری نیاز دارید، اعتبارسنجی کنید.
TestPager باید بهعنوان یک جعلی درنظر گرفته شود - یک بدل آزمایشی که پیادهسازی واقعی Pager را منعکس میکند و درعینحال یک سطح API سادهشده برای آزمایش PagingSource ارائه میدهد. این میاناهای برنامهسازی کاربردی، میاناهای برنامهسازی کاربردی suspend هستند و باید در runTest اجرا شوند، همانطور که در راهنمای آزمایش کردن روالهای مشترک Kotlin در Android توضیح داده شده است.
نمونهای از این میاناهای برنامهسازی کاربردی درحال استفاده را میتوانید در آزمایشهای room-paging پیدا کنید که برای استفاده از TestPager بازسازی شدهاند.
تغییرات میانای برنامهسازی کاربردی
- تکرار راحت را ازطریق
LoadResult.Page.dataتاLoadResult.Page.iterator()فعال میکند. این کار بهطور غیرمستقیم اجازه میدهد از روش کتابخانه استاندارد Kotlinflattenهنگام ارائهList<LoadResult.Page>استفاده شود، مثلاً با ویژگیpagesازPagingStateکه به روشPagingSource.getRefreshKeyمنتقل میشود. (Ie0718)
نسخه 3.2.0-alpha02
۱۰ اوت ۲۰۲۲
androidx.paging:paging-*:3.2.0-alpha02 منتشر شد. نسخه 3.2.0-alpha02 حاوی این commitها است.
ویژگیهای جدید
- اکنون Paging گزارشها را ازطریق کلاسهای
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
۱ ژوئن ۲۰۲۲
androidx.paging:paging-*:3.2.0-alpha01 منتشر شد. نسخه 3.2.0-alpha01 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- سازندههایی برای
PagingDataAdapterوAsyncPagingDataDifferاضافه شد که بهجایCoroutineDispatcher،CoroutineContextرا میپذیرند. (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)
همیاری خارجی
- Updated :compose:ui:ui-test api (updateApi) due to test-coroutines-lib migration (I3366d)
نسخه ۳.۱
نسخه ۳.۱.۱
۹ مارس ۲۰۲۲
androidx.paging:paging-*:3.1.1 منتشر شد. نسخه ۳.۱.۱ شامل این موارد است.
رفع اشکالها
- رویدادهای
LoadState.NotLoadingواسط بین نسلها که بهاشتباه توسط.cachedIn()درج شده بود برداشته شد. این تغییر با حذف رویدادهای زائدLoadState.NotLoadingکه بین تلاش مجدد برای بارگیریهای ناموفق، هنگام بازآوری، یا درطول نامعتبرسازی ایجاد میشدند، واکنش نشان دادن به تغییراتLoadStateرا بسیار آسانتر میکند.
نسخه ۳.۱.۰
۱۷ نوامبر ۲۰۲۱
androidx.paging:paging-*:3.1.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اضافه شده است که باعث میشود «صفحهبندی» همه درخواستهای بار معلقه یا آتی را برای اینPagingSourceکنار بگذارد و آن را نامعتبر کند. این نوع برگشتی برای مدیریت دادههای احتمالاً نامعتبر یا قدیمی طراحی شده است که میتواند از پایگاه داده یا شبکه برگردانده شود. -
.onPagesPresentedو.addOnPagesUpdatedListenerAPI ارائهدهنده اضافه شد که بهصورت همزمان با ارائه صفحهها در رابط کاربری راهاندازی میشوند. بهروزرسانیهای صفحه میتواند در سناریوهای زیر اتفاق بیفتد:- بار اولیه نسل جدید PagingData تکمیل میشود، صرفنظر از اینکه نسل جدید حاوی تغییراتی در موارد ارائهشده باشد یا نه. یعنی، نسل جدیدی که بار اولیه را بدون بهروزرسانی تکمیل میکند، زیرا فهرست دقیقاً یکسان است، همچنان این برگشت تماس را راهاندازی خواهد کرد.
- صفحهای درج میشود، حتی اگر صفحه درجشده حاوی هیچ مورد جدیدی نباشد.
- صفحهای رها میشود، حتی اگر صفحه رهاشده خالی باشد.
نسخه 3.1.0-rc01
۳ نوامبر ۲۰۲۱
androidx.paging:paging-*:3.1.0-rc01 منتشر شد. نسخه 3.1.0-rc01 شامل این تعهدات است.
رفع اشکالها
- شرایط رقابتی + نشت حافظه در .cachedIn() در مواردی که چندین رویداد بارگیری توسط Paging downstream ارسال میشد درحالیکه هیچ ناظری وجود نداشت یا بین زمانی که ناظر درحال جابهجایی به PagingData جدید بود برطرف شد. (Ib682e)
نسخه 3.1.0-beta01
۱۳ اکتبر ۲۰۲۱
androidx.paging:paging-*:3.1.0-beta01 منتشر شد. نسخه 3.1.0-beta01 حاوی این commit-ها است.
رفع اشکالها
- رفع مشکلی که در آن دسترسیهای سریع به موارد متعدد میتوانست باعث شود این موارد برای درنظر گرفته شدن در prefetchDistance حذف شوند و درنتیجه بار کردن صفحه متوقف شود. این امر بهویژه زمانی مشکلساز میشود که تعداد زیادی عنصر بهطور همزمان در چیدمانی قرار بگیرند که بار کردن را در جهت مخالف پیمایش کاربر در اولویت قرار دهد. این دسترسیهای مورد اکنون بافر شدهاند و بهطور همزمان اولویتبندی شدهاند تا از حذف شدن آنها جلوگیری شود. (aosp/1833273)
نسخه 3.1.0-alpha04
۲۹ سپتامبر ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha04 منتشر شد. نسخه 3.1.0-alpha04 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- میاناهای برنامهسازی کاربردی
Flow<PagingData>.observableوFlow<PagingData>.flowableدیگر آزمایشی نیستند. (Ie0bdd)
رفع اشکالها
- برای LoadStates،
endOfPaginationReachedاکنون همیشهfalseبرایLoadType.REFRESHاست. قبلاً ممکن بود endOfPaginationReached برای RemoteMediatorREFRESHtrueباشد، اما نه برای PagingSource. این رفتار اکنون ادغام شده است تا همیشهfalseرا برگرداند زیرا هرگز منطقی نیست که REFRESH پایانی باشد، و اکنون بهعنوان بخشی از قرارداد میانای برنامهسازی کاربردی در LoadStates مستند شده است. هنگام تصمیمگیری درباره اینکه آیا صفحهبندی خاتمه یافته است، همیشه باید این کار را با توجه به جهتهای APPEND یا PREPEND انجام دهید. (I047b6) LoadStates از Paging اکنون قبلاز انتشار پاییندست بین نسلها، منتظر مقادیر معتبر از هر دو PagingSource و RemoteMediator میماند. این کار از ارسال NotLoading در CombinedLoadStates.source.refresh توسط نسلهای جدید PagingData جلوگیری میکند، اگر قبلاً 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
۲۱ ژوئیه ۲۰۲۱
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 را برگردانید که باعث میشود «صفحهبندی» هرگونه درخواست بار کردن معلق یا آتی را برای این PagingSource نادیده بگیرد و آن را نامعتبر کند.
این نوع برگشتی همچنین توسط Paging2 API که از LivePagedList یا RxPagedList استفاده میکند پشتیبانی میشود. When using a PagingSource with Paging2's PagedList APIs, the PagedList is immediately detached, stopping further attempts to load data on this PagedList and triggers invalidation on the PagingSource.
LoadResult یک کلاس مهرومومشده است، به این معنی که این یک تغییر ناسازگار با منبع است بهطوریکه موارد استفادهای که مستقیماً از نتایج PagingSource.load استفاده میکنند باید LoadResult.Invalid را در زمان ترجمه مدیریت کنند. برای مثال، کاربران Kotlin که از exhaustive-when برای بررسی نوع پاسخ استفاده میکنند باید بررسی نوع «نامعتبر» را اضافه کنند. (Id6bd3، b/191806126، b/192013267)
رفع اشکالها
- فراخوانهای برگشتی نامعتبرسازی که ازطریق PagingSource.registerInvalidatedCallback یا DataSource.addInvalidatedCallback اضافه شدهاند، اکنون اگر در PagingSource / DataSource که قبلاً نامعتبر بوده است ثبت شده باشند، بهطور خودکار راهاندازی میشوند. این مشکل مربوط به وضعیت مسابقهای است که باعث میشد «صفحهبندی» نشانهای نامعتبر را حذف کند و وقتی «منبعی» به آن ارائه میشد که ازقبل درطول بار اولیه نامعتبر بود، گیر کند. بهعلاوه، فراخوانیهای برگشتی نامعتبر اکنون پساز فعال شدن بهدرستی برداشته میشوند زیرا تضمین میشود که حداکثر یک بار فراخوانی شوند. (I27e69)
- ارسال مقدار اولیه جایبان (InitialPagedList) از جاریسازی PagedList که بهتازگی نمونهسازی شده است، برای نمونه، LivePagedListBuilder یا RxPagedListBuilder، دیگر دادههای بارشده قبلی را پاک نخواهد کرد.
نسخه 3.1.0-alpha02
۱ ژوئیه ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha02 منتشر شد. نسخه 3.1.0-alpha02 حاوی این ارسالها است.
ویژگیهای جدید
افزودن APIهای ارائهدهنده جریان و شنونده onPagesPresented که بلافاصله پساز بهروزرسانی صفحههای ارائهشده در میانای کاربر راهاندازی میشوند.
ازآنجاییکه این بهروزرسانیها با واسط کاربر همگام هستند، میتوانید روشهای آداپتور را فراخوانی کنید مانند .snapshot، .getItemCount، تا وضعیت را پساز اعمال بهروزرسانی بررسی کنید. توجه داشته باشید که .snapshot() برای فراخوانی صریح باقی مانده است زیرا انجام آن در هر بهروزرسانی میتواند پرهزینه باشد.
بهروزرسانی صفحه میتواند در سناریوهای زیر اتفاق بیفتد:
- بارگیری اولیه نسل جدیدی از PagingData تکمیل میشود، صرفنظر از اینکه نسل جدید حاوی تغییراتی در موارد ارائهشده باشد یا نه. یعنی، نسل جدیدی که بارگیری اولیه را تکمیل میکند بدون هیچ بهروزرسانیای، چون فهرست دقیقاً یکسان است، همچنان این فراخوانی برگشتی را راهاندازی خواهد کرد.
- صفحهای درج میشود، حتی اگر صفحه درجشده حاوی هیچ مورد جدیدی نباشد
- صفحهای حذف میشود، حتی اگر صفحه حذفشده خالی باشد (I272c9، b/189999634)
رفع اشکالها
- دسترسی به PagedList.dataSource از مقدار اولیه تولیدشده توسط LivePagedList یا RxPagedList دیگر بهاشتباه IllegalStateException را ایجاد نمیکند (I96707)
نسخه 3.1.0-alpha01
۲ ژوئن ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha01 منتشر شد. نسخه 3.1.0-alpha01 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- کلاسهای ارائهشده توسط
paging-rxjava3اکنون تحت بستهandroidx.paging.rxjava3قرار دارند تا باpaging-rxjava2تداخل نداشته باشند (Ifa7f6)
رفع اشکالها
- مشکلی برطرف شد که در آن «صفحهبندی» گاهی اوقات رویدادهای differ بدون عملیات را به RecyclerView ارسال میکرد، که میتوانست باعث شود برخی شنوندگان زودتر فعال شوند. (Ic507f، b/182510751)
همیاری خارجی
- میاناهای برنامهسازی کاربردی سازگار PagedList منسوخشده به آرتیفکت rxjava3 اضافه شد (Id1ce2، b/182497591)
نسخه ۱.۰.۰ «صفحهبندی Compose»
نسخه 1.0.0-alpha20
۲۴ مه ۲۰۲۳
androidx.paging:paging-compose:1.0.0-alpha20 منتشر شد. نسخه 1.0.0-alpha20 حاوی این commit-ها است.
ویژگیهای جدید
- «صفحهبندی نوشتن» اکنون از پیشنمایش فهرست دادههای جعلی با ایجاد
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
۳ مه ۲۰۲۳
androidx.paging:paging-compose:1.0.0-alpha19 منتشر شد. نسخه 1.0.0-alpha19 شامل این تعهدات است.
پشتیبانی از همه چیدمانهای تنبل
قبلاً، Paging Compose افزونههای سفارشی items و itemsIndexed را در LazyListScope ارائه میکرد، به این معنی که نمیتوانستید از Paging Compose با سایر چیدمانهای تنبل مانند LazyVerticalGrid، HorizontalPager، یا سایر مؤلفههای تنبل سفارشی ارائهشده توسط کتابخانههای Wear و TV استفاده کنید. رسیدگی به این عدم انعطافپذیری بهروزرسانی اصلی این نسخه است.
برای پشتیبانی از چیدمانهای تنبل بیشتر، باید در لایهای متفاوت میانای برنامهسازی کاربردی میساختیم - بهجای ارائه میانای برنامهسازی کاربردی items سفارشی برای هر چیدمان تنبل، «صفحهبندی 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
۸ فوریه ۲۰۲۳
androidx.paging:paging-compose:1.0.0-alpha18 بدون تغییر منتشر شد. نسخه 1.0.0-alpha18 حاوی این commit-ها است.
نسخه 1.0.0-alpha17
۲۴ اکتبر ۲۰۲۲
androidx.paging:paging-compose:1.0.0-alpha17 منتشر شد. نسخه 1.0.0-alpha17 شامل این تعهدات است.
ویژگیهای جدید
- هنگام تماس با
collectLazyPagingItems، ازCoroutineContextسفارشی پشتیبانی شود. (I7a574، b/243182795، b/233783862)
نسخه 1.0.0-alpha16
۱۰ اوت ۲۰۲۲
androidx.paging:paging-compose:1.0.0-alpha16 منتشر شد. نسخه 1.0.0-alpha16 حاوی این commit-ها است.
ویژگیهای جدید
- اکنون «صفحهبندی» ازطریق کلاس
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
۱ ژوئن ۲۰۲۲
androidx.paging:paging-compose:1.0.0-alpha15 منتشر شد. نسخه 1.0.0-alpha15 شامل این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- سازندههایی برای
PagingDataAdapterوAsyncPagingDataDifferاضافه شده است که بهجایCoroutineDispatcher،CoroutineContextرا میپذیرند. (Idc878)
رفع اشکالها
-
LazyPagingItemsاکنونloadStateاولیه را تنظیم میکند تاLoadState.Loadingبازآوری داشته باشد. (I55043، b/224855902)
نسخه 1.0.0-alpha14
۱۳ اکتبر ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha14 منتشر شد. نسخه 1.0.0-alpha14 شامل این تعهدات است.
نسخه 1.0.0-alpha13
۲۹ سپتامبر ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha13 منتشر شد. نسخه 1.0.0-alpha13 شامل این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- تابع
LazyPagingItems.snapshot()با ویژگیLazyPagingItems.itemSnapshotListجایگزین شد (Ie2da8) -
LazyPagingItems.getAsState()منسوخشده برداشته شد (Ie65e4)
نسخه 1.0.0-alpha12
۲۱ ژوئیه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha12 منتشر شد. نسخه 1.0.0-alpha12 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
-
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)که برای اتصال «صفحهبندی» باLazyColumn/Rowاستفاده میشوند اکنون پارامتر کلید گزینه را میپذیرند که به شما امکان میدهد کلید پایداری را که نشاندهنده مورد است مشخص کنید. در اینجا میتوانید درباره کلیدها بیشتر بخوانید. (I7986d) - تابع
lazyPagingItems.getAsState(index)اکنون منسوخ شده است. درعوض ازlazyPagingItems[index]استفاده کنید. (I086cb، b/187339372)
نسخه 1.0.0-alpha11
۳۰ ژوئن ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha11 منتشر شد. نسخه 1.0.0-alpha11 شامل این تعهدات است.
نسخه 1.0.0-alpha10
۲ ژوئن ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha10 منتشر شد. نسخه 1.0.0-alpha10 حاوی این commit-ها است.
نسخه 1.0.0-alpha09
۱۸ مه ۲۰۲۱
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فقط با Compose نسخه1.0.0-beta07و بالاتر سازگار است.
نسخه 1.0.0-alpha08
۲۴ فوریه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha08 منتشر شد. نسخه 1.0.0-alpha08 شامل این commit-ها است.
برای ادغام با Compose 1.0.0-beta01 بهروز شد.
نسخه 1.0.0-alpha07
۱۰ فوریه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha07 منتشر شد. نسخه 1.0.0-alpha07 حاوی این تعهدات است.
برای ادغام با Compose alpha12 بهروز شد.
نسخه 1.0.0-alpha06
۲۸ ژانویه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha06 منتشر شد. نسخه 1.0.0-alpha06 شامل این تعهدات است.
رفع اشکالها
بهروزرسانی شد تا به Compose 1.0.0-alpha11 وابسته باشد.
نسخه 1.0.0-alpha05
۱۳ ژانویه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha05 منتشر شد. نسخه 1.0.0-alpha05 شامل این commit-ها است.
بهروزرسانی شد تا به Compose 1.0.0-alpha10 وابسته باشد.
نسخه 1.0.0-alpha04
۱۶ دسامبر ۲۰۲۰
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
۲ دسامبر ۲۰۲۰
androidx.paging:paging-compose:1.0.0-alpha03 منتشر شد. نسخه 1.0.0-alpha03 حاوی این commit-ها است.
- بهروزرسانی شد تا با Compose 1.0.0-alpha08 مطابقت داشته باشد.
نسخه 1.0.0-alpha02
۱۱ نوامبر ۲۰۲۰
androidx.paging:paging-compose:1.0.0-alpha02 منتشر شد. نسخه 1.0.0-alpha02 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- روشهای
.peek()،.snapshot()،.retry()، و.refresh()بهLazyPagingItemاضافه شد که همان عملکرد موجود درAsyncPagingDataDiffer/PagingDataAdapterرا نشان میدهد (Iddfe8، b/172041660)
نسخه 1.0.0-alpha01
۲۸ اکتبر ۲۰۲۰
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")
}
}
}
نسخه ۳.۰.۱
نسخه ۳.۰.۱
۲۱ ژوئیه ۲۰۲۱
androidx.paging:paging-*:3.0.1 منتشر شد. نسخه ۳.۰.۱ حاوی این ثبتها است.
رفع اشکالها
- دسترسی به
PagedList.dataSourceاز مقدار اولیه تولیدشده توسطLivePagedListیاRxPagedListدیگر بهاشتباه IllegalStateException را ایجاد نخواهد کرد (I96707)
نسخه ۳.۰.۰
نسخه ۳.۰.۰
۵ مه ۲۰۲۱
androidx.paging:paging-*:3.0.0 منتشر شد. نسخه ۳.۰.۰ حاوی این ثبتها است.
ویژگیهای اصلی نسخه 3.0.0
اکثر API موجود از Paging 2.x.x بهنفع API جدید Paging 3 منسوخ شده است تا بهبودهای زیر را بههمراه داشته باشد:
- پشتیبانی درجه یک برای روالهای مشترک Kotlin و Flow
- پشتیبانی برای لغو
- نشانهای خطای و وضعیت بار داخلی
- عملکرد امتحان مجدد + بازآوری
- هر سه زیرکلاس DataSource در یک کلاس واحد PagingSource ترکیب شدهاند
- تبدیلهای صفحه سفارشی ازجمله تبدیل داخلی برای افزودن جداکنندهها
- درحال بار کردن سرصفحهها و پانویسهای وضعیت
نسخه 3.0.0-rc01
۲۱ آوریل ۲۰۲۱
androidx.paging:paging-*:3.0.0-rc01 منتشر شد. نسخه 3.0.0-rc01 شامل این تعهدات است.
رفع اشکالها
- رفع مشکلی که در آن «صفحهبندی» گاهی اوقات رویدادهای بدون عملیات متفاوت را به RecyclerView ارسال میکرد که میتوانست باعث شود برخیاز شنوندگان زودتر از موعد راهاندازی شوند. (Ic507f، b/182510751)
نسخه 3.0.0-beta03
۲۴ مارس ۲۰۲۱
androidx.paging:paging-*:3.0.0-beta03 منتشر شد. نسخه ۳.۰.۰-beta03 شامل این تعهدات است.
رفع اشکالها
- نحوه مدیریت جایبانها را هنگام بارگیری مجدد فهرست بازطراحی کردهایم تا از پرشهای غیرمنتظره در RecyclerView جلوگیری کنیم. برای جزئیات، NullPaddedDiffing.md را ببینید. (If1490، b/170027529، b/177338149)
- سازندگان مختلف PagedList (مسیر سازگاری قدیمی) دیگر بهطور نادرست و همزمان
DataSource.Factory.create()را در رشته اصلی هنگام فراخوانی.build()فراخوانی نمیکنند. (b/182798948)
نسخه 3.0.0-beta02
۱۰ مارس ۲۰۲۱
androidx.paging:paging-*:3.0.0-beta02 منتشر شد. نسخه 3.0.0-beta02 شامل این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- افزونههای Rx3 اکنون بهدرستی
@ExperimentalCoroutinesApiالزام «موافقت» را منتشر میکنند. قبلاً در روش@getعلامتگذاری میشدند که بهدلیل موارد زیر توسط «گردآورنده Kotlin» نادیده گرفته میشود: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)
رفع اشکالها
- Enforce restrictions on public usage of experimental APIs (I6aa29, b/174531520)
- اشکالی که باعث میشد
PagingStateهمیشهnullباشد وقتی بازآوری از دور فراخوانده میشود برطرف شد. - اشکالی برطرف شد که در آن صفحههای خالی برگرداندهشده توسط PagingSource میتوانست از واکشی مجدد Paging برای برآورده کردن
prefetchDistanceجلوگیری کند و باعث شود Paging «گیر کند».
نسخه 3.0.0-beta01
۱۰ فوریه ۲۰۲۱
androidx.paging:paging-*:3.0.0-beta01 منتشر شد. نسخه 3.0.0-beta01 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
- پیچهای Rx2 و Rx3 اکنون حاشیهنویسی آزمایشی را که به آن وابسته است نمایان میکنند. اگر از پوشانندههای سازگار Rx در paging-rxjava2 یا
paging-rxjava3 استفاده میکنید، اکنون باید موارد استفاده را با
@OptIn(ExperimentalCoroutinesApi::class)حاشیهنویسی کنید (Ib1f9d)
رفع اشکالها
- رفع خطای
IndexOutOfBoundsException: Inconsistency detectedکه گاهی هنگام استفاده از «میاناهای برنامهسازی کاربردی» نسخه ۲DataSourceازطریق مسیرهای سازگاری رخ میداد - اکنون تماس
isInvalidدرطول مقداردهی اولیهDataSourceهنگام استفاده ازطریق مسیرهای سازگاری بهجای رشته اصلی، بهدرستی در fetchDispatcher راهاندازی میشود. این کارIllegalStateExceptionناشی از دسترسی Db در رشته اصلی را هنگام استفاده از پیادهسازیPagingSourceRoom برطرف میکند.
نسخه 3.0.0-alpha13
۲۷ ژانویه ۲۰۲۱
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 هر دو endOfPaginationReached را علامتگذاری کنند. اگر از RemoteMediator استفاده نشود، remote loadState نادیده گرفته میشود. این ویژگی عمدتاً زمانی مفید است که بخواهید جداکنندههای بخش را فقط زمانی نشان دهید که بخش بهطور کامل بار شده باشد، ازجمله واکشی از منبع راه دور، مثلاً شبکه.SOURCE_COMPLETE- only wait for PagingSource to mark endOfPaginationReached even if RemoteMediator is used. این کار باعث میشود سرصفحهها و پاصفحهها بهطور همزمان با بارگیری اولیه ارائه شوند، که مانع از نیاز کاربران به پیمایش برای دیدن جداکنندههای پایانی میشود. (Ibe993، b/174700218)
رفع اشکالها
- نشت حافظه نادری که وقتی PagingSource قبلاز اینکه PageFetcher بتواند بار کردن از آن را شروع کند نامعتبر میشود اتفاق میافتد برطرف شد. (I9606b، b/174625633)
نسخه 3.0.0-alpha12
۱۳ ژانویه ۲۰۲۱
androidx.paging:paging-*:3.0.0-alpha12 منتشر شد. نسخه ۳.۰.۰-alpha12 حاوی این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- InvalidatingPagingSourceFactory دیگر کلاس انتزاعی نیست زیرا هرگز روش انتزاعی نداشته است. (I4a8c4)
- برای کاربران Java، سربارگذاری .cachedIn() اضافه شد که ViewModel را بهجای Lifecycle یا CoroutineScope میپذیرد. (I97d81، b/175332619)
- به تماسگیرندگان جاوا اجازه میدهد تا با پذیرفتن Executor در آرگومانهای عملگر تبدیل، از عملیات تبدیل PagingData بهصورت ناهمگام استفاده کنند. اکنون پسوند -Sync از همه عاملهای تبدیل -Sync برداشته شده است و کاربران Kotlin Coroutine باید با فراخواندن تابع افزونهای که بهجای آن یک بلوک تعلیق را میپذیرد، ابهامزدایی کنند.
همه عملگرهای تبدیل PagingData به افزونهها
در کلاس استاتیک PagingDataTransforms منتقل شدهاند. کاربران Java باید
آنها را ازطریق کمککنندههای ایستا فراخوانی کنند، مثلاً
PagingDataTransforms.map(pagingData, transform)برای کاربران Kotlin، نحو یکسان است اما باید تابع را وارد کنید. (If6885، b/172895919)
رفع اشکالها
- اشکالی که باعث میشد اگر قبلاً به انتهای صفحهبندی رسیده باشید،
RemoteMediator.load()درطولadapter.refresh()فراخوانی نشود برطرف شد.
نسخه 3.0.0-alpha11
۱۶ دسامبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha11 منتشر شد. نسخه ۳.۰.۰-alpha11 حاوی این تعهدات است.
ویژگیهای جدید
- پشتیبانی از وضعیت ذخیرهشده برای موارد استفاده پایه زیر اضافه شد (پشتیبانی کامل، بهویژه در مورد منبع لایهای، هنوز درحال توسعه است):
- جریان در حافظه نهان ذخیره میشود و برنامه بسته نمیشود (برای نمونه، جریان در مدل نما در حافظه نهان ذخیره میشود و فعالیت در فرایند بازآفرینی میشود)
- منبع صفحهبندی شمارش میشود، جایبانها فعال هستند، و چیدمان نامنظم نیست.
تغییرات میانای برنامهسازی کاربردی
-
PagingSource.getRefreshKey()اکنون میانای برنامهسازی کاربردی پایدار است (I22f6f، b/173530980) -
PagingSource.invalidateدیگر تابع باز نیست. اگر لازم است هنگام وقوع ابطال مطلع شوید، بهجای لغو invalidate، فراخوانی روش registerInvalidatedCallback را درنظر بگیرید. (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 را بدون استفاده از «صفحهبندی» یا PagedList آزمایش میکنید،
pageSizeممکن است باPagingConfig.pageSizeمطابقت نداشته باشد اگرinitialLoadSizeرا نیز تنظیم کرده باشید. اگر برای آزمایشهایتان مهم است، بهجای آن از Pager/PagedList استفاده کنید که بهصورت داخلی PageSize صحیح را برای روشهای بار کردن DataSource تنظیم میکند. (I98ac7، b/149157296)
رفع اشکالها
- خرابی ناشی از IllegalStateException هنگام استفاده از جداکنندهها با تنظیم PagingConfig.maxSize برطرف شد. (I0ed33، b/174787528)
- اشکالی که باعث میشد وضعیت بارگیری برای PREPEND / APPEND
بلافاصله پساز بارگیری اولیه درصورت تنظیم RemoteMediator به
NotLoading(endOfPaginationReached = true)بهروز نشود برطرف شد (I8cf5a) - اشکالی برطرف شد که در آن میاناهای برنامهسازی کاربردی طرف ارائهدهنده مثل .snapshot()، .peek()، و غیره، فهرست قبلی (قدیمی) را در بهروزرسانیهای ListUpdateCallback برمیگرداندند.
- اشکالی که باعث میشد اپراتورهای Separators هنگام استفاده با RemoteMediator سرصفحه یا پاصفحه اضافه نکنند برطرف شد
- اشکالی برطرف شد که در آن بهروزرسانیهای LoadState به NotLoading برای RemoteMediator در وضعیت Loading گیر میکرد
- اشکالی برطرف شد که در آن میانای برنامهسازی کاربردی سازگاری Paging2.0،
.asPagingSourceFactory()، میتوانست باعث شودDataSourceپشتیبان در CoroutineDispatcher نادرست مقداردهی اولیه شود. این کار باعث رفع خرابی و موارد احتمالی ANR میشود، بهویژه هنگام استفاده از پیادهسازی فعلی Room از PagingSource که از این مسیر سازگاری استفاده میکند.
نسخه 3.0.0-alpha10
۲ دسامبر ۲۰۲۰ (۱۲ آذر ۱۳۹۹)
androidx.paging:paging-*:3.0.0-alpha10 منتشر شد. نسخه 3.0.0-alpha10 حاوی این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
میاناهای برنامهسازی کاربردی منسوخشده
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()API است که نامعتبر کردن را به همه PagingSourceهایی که منتشر میکند ارسال میکند. با تشکر از @claraf3! (Ie71fc، b/160716447)
مشکلات شناختهشده
- Headers and footers from the .insertSeparators() transform may not appear immediately when using RemoteMediator b/172254056
- اگر باطل کردن و
PagingSource.load(LoadParams.Refresh(...))قبلاز بازگشتRemoteMediator.load()تکمیل شود، استفاده از RemoteMediator میتواند باعث گیر کردنLoadStateاز راه دور شود b/173717820
نسخه 3.0.0-alpha09
۱۱ نوامبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha09 منتشر شد. نسخه ۳.۰.۰-alpha09 حاوی این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- کاملاً منسوخ کردن روشهای dataRefreshFlow / Listener با بند replaceWith. (I6e2dd)
رفع اشکالها
- رفع مشکل
IllegalArgumentExceptionکه هنگام استفاده از جداکنندهها با RemoteMediator ایجاد میشد و زمانی که بارگیری ازراهدور که endOfPagination را برمیگرداند هنوز درحال اجرا بود، یک invalidate راهاندازی میشد (I3a260)
نسخه 3.0.0-alpha08
۲۸ اکتبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha08 منتشر شد. نسخه 3.0.0-alpha08 حاوی این commitها است.
تغییرات میانای برنامهسازی کاربردی
- انواع Kotlin / Java مربوط به
DataSource.InvalidatedCallbackبا فعال کردن تبدیلهای SAM در Kotlin ازطریق میانای تابع (در Kotlin 1.4 دردسترس است) ترکیب شدهاند. این کار همچنین اشکالی را برطرف میکند که در آن نوع kotlin از callbackهای نامعتبر پساز تبدیل توسط.mapیا.mapByPageفراخوانی نمیشدند. (I1f244، b/165313046)
رفع اشکالها
- تعامل صفحهبندی با ViewPager بهطور قابلتوجهی بهبود یافته است. بهطور دقیق، «صفحهبندی» دیگر تماس
RemoteMediator#loadرا بهدلیل نامعتبر شدن صفحه لغو نخواهد کرد. همچنین، اگر «بازآوری» لازم باشد، تا زمانی که درخواست «بازآوری» با موفقیت تکمیل نشود، دیگر درخواست بارگذاری الحاق/پیشالحاق ایجاد نخواهد کرد. (I6390b، b/162252536) - بررسی API lint برای MissingGetterMatchingBuilder برای androidx فعال شده است (I4bbea، b/138602561)
- اشکالی برطرف شد که در آن دستیارهای
.withLoadState*ConcatAdapterبهدلیل اطلاعرسانی به RecyclerView از رشته پسزمینه ازکار میافتادند (I18bb5، b/170988309) - اشکالی برطرف شد که در آن بار کردن صفحه غیرخالی بسیار کوچک گاهی مانع از این میشد که پیشواکشی بار کردنها را بهدرستی راهاندازی کند.Iffda3 b/169259468
نسخه 3.0.0-alpha07
۱ اکتبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha07 منتشر شد. نسخه 3.0.0-alpha07 حاوی این ارسالها است.
تغییرات میانای برنامهسازی کاربردی
- Async PagingData Guava-based operators now accept an Executor as a param, to control execution context. (Id4372)
رفع اشکالها
- استثنای IndexOutOfBounds که در RemoteMediator بهدلیل وضعیت مسابقه ایجاد میشد برطرف شد. (I00b7f، b/165821814)
- شرایط رقابتی در تبدیل DataSource -> PagingSource که میتوانست باعث شود PagingSource حاصل سیگنالهای باطلسازی را از DataSource نادیده بگیرد برطرف شد.
- مشکلی در منطق واکشی صفحه برطرف شد که گاهی باعث میشد تا زمانی که PagingDataAdapter.refresh() فراخوانی نشده است، نسلهای جدید PagingSource را دریافت نکند
- مشکلی برطرف شد که باعث میشد گاهیاوقات هنگام استفاده از DataSource تبدیلشده به PagingSource (مانند آنچه توسط Room تولید میشود) در ارتباط با RemoteMediator، موقعیت پیمایش ازدست برود
همیاری خارجی
- از @simonschiller بهخاطر افزودن عملگرهای تبدیل ناهمگام مبتنی بر RxJava2، RxJava3، و Guava برای PagingData سپاسگزاریم!
نسخه 3.0.0-alpha06
۲ سپتامبر ۲۰۲۰ (۱۲ شهریور ۱۳۹۹)
androidx.paging:paging-*:3.0.0-alpha06 منتشر شد. نسخه 3.0.0-alpha06 شامل این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
UnsupportedOperationExceptionبا پیامرسانی واضحتر درباره عدم پشتیبانی از شناسههای پایدار اکنون هروقتPagingDataAdapter.setHasStableIdsفراخوانی شود، نشان داده میشود. (Ib3890, b/158801427)
رفع اشکالها
- insertSeparators دیگر صفحههای خالی را فیلتر نمیکند و به ارائهدهنده اجازه میدهد فاصله پیشواکشی را حتی در مواردی که صفحههای خالی زیادی درج شده است رعایت کند. (I9cff6، b/162538908)
نسخه 3.0.0-alpha05
۱۹ اوت ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha05 منتشر شد. نسخه 3.0.0-alpha05 حاوی این commit-ها است.
رفع اشکالها
- اکنون صفحهبندی حتی زمانی که دادههای ارائهشده بهشدت فیلتر شده باشند، صفحات را بهدرستی پیشواکشی میکند
- برگرداندن
LoadResult.Errorبه بارگیری مجدد دیگر باعث نمیشود دسترسیهای «مورد» بهاشتباه دوباره امتحان کردن را مجدداً راهاندازی کند
همیاری خارجی
- از Clara F بهخاطر کمک به پاکسازی برخیاز آزمایشها سپاسگزاریم! (549612)
نسخه 3.0.0-alpha04
۵ اوت ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha04 منتشر شد. نسخه 3.0.0-alpha04 شامل این commit-ها است.
تغییرات میانای برنامهسازی کاربردی
-
peek()API به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)
رفع اشکالها
PositionalDataSourceتبدیلشده بهPagingSourceازطریق کمککنندهtoPagingSourceFactory، ازجملهPagingSourceتولیدشده توسط Room اکنون بهدرستی خود را برای پشتیبانی از پرش علامتگذاری میکنند. (I3e84c، b/162161201)- اشکالی برطرف شد که در آن استفاده از نوع همگام submitData
گاهی اوقات منجر به رقابت میشد و
ClosedSendChannelExceptionرا ایجاد میکرد (I4d702، b/160192222)
همیاری خارجی
- از زک سویرز برای افزودن پوششهای سازگاری RxJava3 ازطرف Slack سپاسگزاریم! (I49ef3، b/161480176)
نسخه 3.0.0-alpha03
۲۲ ژوئیه ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha03 منتشر شد. نسخه ۳.۰.۰-alpha03 شامل این تعهدات است.
تغییرات میانای برنامهسازی کاربردی
- سازنده PagingState اکنون عمومی است که باید آزمایش پیادهسازیهای getRefreshKey() را آسانتر کند (I8bf15)
- انواع تابع نگاشت Kotlin مربوط به DataSource را از Java پنهان کرد تا ابهام بین انواع اصلی و Kotlin برطرف شود. (If7b23، b/161150011)
- میاناهای برنامهسازی کاربردی اضافی که برای راحتی کاربران Kotlin درنظر گرفته شدهاند با @JvmSynthetic علامتگذاری شدهاند (I56ae5)
- افزودن اضافهبارها برای سازنده LoadResult.Page که itemsBefore و itemsAfter را بهطور پیشفرض روی COUNT_UNDEFINED تنظیم میکند (I47849)
- اپراتورهای PagingData موجود را بهگونهای تغییر دادیم که روشهای تعلیق را بپذیرند و اپراتورهای جدید mapSync، flatMapSync، و filterSync غیرتعلیقی را برای کاربران Java معرفی کردیم. روشهای تبدیل موجود به توابع افزونه منتقل شدهاند، بنابراین کاربران Kotlin اکنون باید آنها را وارد کنند. (I34239، b/159983232)
رفع اشکالها
- Room (و PositionalDataSource) PagingSources اکنون یک جداکننده پیشرو را بهعنوان بخشی از صفحه اول نمایش میدهند، بنابراین کاربر برای آشکار کردن آن نیازی به پیمایش ندارد. (I6f747، b/160257628)
- دسترسی به موارد در جایبانها اکنون بهدرستی بارگیریهای PagingSource را راهاندازی میکند تا زمانی که صفحهای برگردانده شود که نمایه درخواستشده را پساز تبدیل شدن توسط PagingData.filter() برآورده کند (I95625، b/158763195)
- اشکالی برطرف شد که در آن گاهی اوقات پیمایش پساز برگشتن خطا از PagingSource میتوانست مانع از امتحان مجدد PagingDataAdapter.retry() شود. (I1084f، b/160194384)
- مشکلی را برطرف میکند که در آن دسترسی به موارد پساز رها کردن صفحه ممکن است صفحهها را بار نکند، اگرچه دسترسی به مورد در prefetchDistance (Ie95ae، b/160038730) باشد
- تنظیم PagingConfig.maxSize دیگر پساز رویداد رها کردن، جایبانها را فعال نمیکند (I2be29، b/159667766)
نسخه 3.0.0-alpha02
۲۴ ژوئن ۲۰۲۰
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 APIs برای RemoteMediator اضافه شد - RxRemoteMediator و ListenableFutureRemoteMediator
- برای دسترسی به موارد رایج مثل
isEmpty()وfirstItemOrNull()، یاریرسانهایی به PagingState اضافه شد (I3b5b6، b/158892717)
رفع اشکالها
- Pager اکنون استفاده مجدد از PagingSource را در کارخانه بررسی میکند تا از استفاده مجدد تصادفی از PagingSource نامعتبر که خطای نامشخصی ارائه میداد جلوگیری کند (I99809، b/158486430)
- خطاهای ناشی از REFRESH (بازآوری) RemoteMediator دیگر مانع از بارگیری PagingSource نمیشود (I38b1b، b/158892717)
- نسخه غیرتعلیقی
submitDataدیگر بهدلیل جمعآوری همزمان در چندPagingDataوقتی پساز نسخه تعلیقیsubmitDataفراخوانی میشود باعث خرابی نمیشود. (I26358، b/158048877) - استثنای «نمیتوان دو بار از صفحهبند جمعآوری کرد» که ممکن بود پساز تغییر پیکربندی رخ دهد برطرف شد (I58bcc، b/158784811)
نسخه 3.0.0-alpha01
۱۰ ژوئن ۲۰۲۰ (۲۱ خرداد ۱۳۹۹)
androidx.paging:paging-*:3.0.0-alpha01 منتشر شد. نسخه 3.0.0-alpha01 حاوی این commit-ها است.
«کتابخانه صفحهبندی» به نسخه ۳.۰ بهروزرسانی شده است تا چندین ویژگی جدید اصلی را فعال کند.
ویژگیهای جدید نسخه ۳.۰
- پشتیبانی درجه یک از روالهای مشترک Kotlin و Flow.
- پشتیبانی از بار کردن ناهمگام با توابع تعلیق روالهای همگام، RxJava Single، یا Guava ListenableFuture primitives.
- سیگنالهای خطا و وضعیت بارگیری داخلی برای طراحی واسط کاربر واکنشگرا، ازجمله عملکرد بازآوری و امتحان مجدد.
- بهبودهایی در لایه مخزن
- میانای منبع داده سادهشده
- صفحهبندی سادهشده شبکه + پایگاه داده
- پشتیبانی لغو
- بهبود لایه نمایش
مشکلات شناختهشده
- Paging 3 javadocs هنوز دردسترس نیست. در این فاصله، لطفاً از راهنماهای پیوندشده در بالا یا اسناد Kotlin استفاده کنید. (b/158614050)
نسخه ۲.۱.۲
نسخه ۲.۱.۲
۱۸ مارس ۲۰۲۰
androidx.paging:paging:2.1.2 منتشر شد. نسخه ۲.۱.۲ حاوی این ثبتها درمقابل ۲.۱.۰ است.
رفع اشکالها
- رفع مشکل
IndexOutOfBoundsExceptionدر موارد نادری که موقعیت درطول نامعتبرسازی تبدیل میشود.
مشکل انتشار
نسخه
2.1.1صفحهبندی بهاشتباه از شاخهای با پیکربندی نادرست منتشر شده است و میاناهای برنامهسازی کاربردی و عملکردهای نیمهپیادهسازیشدهای را که در نسخه آتی ارائه خواهند شد درمعرض دید قرار داده است.«صفحهبندی
2.1.2» حاوی اصلاح بار مرکزی است که دراصل در نسخه ۲.۱.۱ منتشر شده بود، اما این بار بهدرستی در بالای نسخه ۲.۱.۰ انتخاب شده است. اگر درحالحاضر از نسخه ۲.۱.۱ استفاده میکنید، قویاً توصیه میشود به این نسخه ارتقا دهید.
نسخه ۲.۱.۱
نسخه ۲.۱.۱
۱۸ دسامبر ۲۰۱۹
androidx.paging:paging-*:2.1.1 منتشر شد. نسخه ۲.۱.۱ حاوی این ثبتها است.
رفع اشکالها
- بارگیریهای اولیه متوالی از PositionalDataSources اکنون وقتی جایبانها غیرفعال باشند، حول آخرین دسترسی متمرکز میشوند
نسخه ۲.۱.۰
نسخه ۲.۱.۰
۲۵ ژانویه ۲۰۱۹
صفحهبندی 2.1.0 بدون تغییر نسبت به 2.1.0-rc01 منتشر شده است.
نسخه 2.1.0-rc01
۶ دسامبر ۲۰۱۸
صفحهبندی 2.1.0-rc01 بدون تغییر نسبت به 2.1.0-beta01 منتشر شده است.
نسخه 2.1.0-beta01
۱ نوامبر ۲۰۱۸
صفحهبندی 2.1.0-beta01 بدون تغییر از 2.1.0-alpha01 منتشر شد.
نسخه 2.1.0-alpha01
۱۲ اکتبر ۲۰۱۸
صفحهبندی 2.1.0-alpha01 دو افزودنی اصلی دارد - حذف صفحه، و کتابخانههای افزونه KTX برای هر آرتیفکت - و همچنین چندین تغییر API و رفع اشکال دیگر.
تغییرات میانای برنامهسازی کاربردی
PagedList.Config.Builder.setMaxSize()برای محدود کردن تعداد موارد بارشده در حافظه اضافه شد.-
androidx.paging.Config()بهعنوان جایگزین Kotlin برایPagedList.Config.Builderاضافه شد -
androidx.paging.PagedList()بهعنوان جایگزین Kotlin برایPagedList.Builderاضافه شد -
DataSourceFactory.toLiveData()بهعنوان جایگزین Kotlin برایLivePagedListBuilderاضافه شد -
DataSourceFactory.toObservable()وtoFlowable()بهعنوان جایگزینهای Kotlin برایRxPagedListBuilderاضافه شدند -
AsyncPagedListDiffer.addPagedListListener()برای گوش دادن به زمانی که PagedList جابهجا میشود اضافه شد. b/111698609 - گونه
PagedListAdapter.onCurrentListChanged()اضافه شد که فهرست قدیمی و جدید را رد میکند، گونه قبلی منسوخ شد. -
PagedListAdapter/AsyncPagedListDiffer.submitList()گونه اضافه شد که پساز تفاوتگیری، یک تماس برگشتی اضافی میگیرد که اگر/وقتی فهرست صفحهبندیشده نمایش داده شود راهاندازی میشود. این کار به شما امکان میدهد جایگزینی PagedList را با بهروزرسانیهای دیگر واسط کاربر همگامسازی کنید. b/73781068 PagedList.getLoadedCount()اضافه شد تا بدانید چند وسیله در حافظه است. توجه داشته باشید که اگر جایبانها غیرفعال باشند، مقدار برگشتی همیشه برابر با.size()است.
رفع اشکالها
- رفع شرایط رقابتی هنگام تفاضلگیری درصورت استفاده مجدد از فهرستها b/111591017
PagedList.loadAround()اکنون وقتی نمایه نامعتبر باشدIndexOutOfBoundsExceptionرا برمیگرداند. قبلاً ممکن بود با استثنای نامشخص دیگری ازکار بیفتد.- موردی را برطرف کردیم که در آن اندازه بارگیری اولیه بسیار کوچک همراه با دادههای بدون تغییر منجر به عدم بارگیری بیشتر میشد b/113122599
نسخه ۲.۰.۰
نسخه ۲.۰.۰
۱ اکتبر ۲۰۱۸
Paging 2.0.0 با یک رفع اشکال منتشر شده است.
رفع اشکالها
- خرابیای که ممکن بود با پیمایش بسیار سریع بااستفاده از
PositionalDataSourceو جایبانها b/114635383 رخ دهد برطرف شد.
نسخه 2.0.0-beta01
۲ ژوئیه ۲۰۱۸
رفع اشکالها
- مشکل ناپدید شدن محتوا در برخی موارد پیشافزودن (غیرفعال بودن جایبانها، PositionalDataSource) برطرف شد b/80149146
- (قبلاً در
1.0.1منتشر شده است) خرابیهایی که در آنهاPagedListAdapterوAsyncPagedListDifferنمیتوانستند رویدادهای جابهجایی را علامتگذاری کنند برطرف شد. b/110711937
وابستگیهای Pre-AndroidX
برای نسخههای پیشاز 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"
}
نسخه ۱.۰.۱
نسخه ۱.۰.۱
۲۶ ژوئن ۲۰۱۸
Paging 1.0.1 با یک رفع اشکال در runtime منتشر شد. برای پایداری، اکیداً توصیه میکنیم از 1.0.1 استفاده کنید. Paging RxJava2 1.0.1 نیز منتشر شده است و با 1.0.0-rc1 یکسان است.
رفع اشکالها
- خرابیهایی که در آنها
PagedListAdapterوAsyncPagedListDifferنمیتوانستند رویدادهای جابهجایی را علامتدهی کنند برطرف شد. b/110711937
RxJava2 Version 1.0.0
RxJava2 نسخه 1.0.0-rc1
۱۶ مه ۲۰۱۸
Paging RxJava2 1.0.0-rc1 به نامزد انتشار بدون تغییر از نسخه اولیه
آلفا منتقل میشود.
نسخه ۱.۰.۰
نسخه 1.0.0-rc1
۱۹ آوریل ۲۰۱۸ نامزد انتشار صفحهبندی
ما دیگر هیچ مشکل شناختهشده یا ویژگی جدیدی برای انتشار
«صفحهبندی» 1.0.0 برنامهریزی نکردهایم. لطفاً پروژههایتان را ارتقا دهید تا از 1.0.0-rc1 استفاده کنید و
به ما کمک کنید آن را در شرایط سخت آزمایش کنیم تا بتوانیم 1.0.0 بسیار مطمئنی ارائه دهیم.
هیچ تغییری در این نسخه پخش وجود ندارد، این نسخه پخش همانند 1.0.0-beta1 است.
نسخه 1.0.0-beta1
۵ آوریل ۲۰۱۸
Paging برای مدت کوتاهی در نسخه بتا خواهد بود و سپس به نامزد انتشار ارتقا مییابد.
ما قصد نداریم تغییرات بیشتری در API برای Paging 1.0 ایجاد کنیم و سطح انتظار برای هرگونه تغییر در API بسیار بالا است.
پشتیبانی Alpha RxJava2 برای «صفحهبندی» بهعنوان یک ماژول اختیاری جداگانه (android.arch.paging:rxjava2:1.0.0-alpha1) منتشر شده است
و تا زمانیکه پایدار شود، بهطور موقت نسخهبندی جداگانه خواهد داشت.
این کتابخانه جدید جایگزین RxJava2 برای LivePagedListBuilder ارائه میدهد که قادر به ساختن
Observable و Flowable است و بهجای Executor، Scheduler میگیرد:
کاتلین
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
جاوا
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
ویژگیهای جدید
-
RxPagedListBuilderازطریق عنصر جدیدandroid.arch.paging:rxjava2اضافه شده است.
تغییرات میانای برنامهسازی کاربردی
تغییرات API برای روشن کردن نقش اجراکنندگان در سازندگان:
نام
setBackgroundThreadExecutor()بهsetFetchExecutor()تغییر کرد (درPagedList.BuilderوLivePagedListBuilder)نام
setMainThreadExecutor()بهsetNotifyExecutor()(درPagedList.Builder) تغییر کرد.
PagedList.mCallbacksعضو ثابت خصوصی شد.
رفع اشکالها
LivePagedListBuilderبارگیری اولیهPagedListرا در مجری مشخصشده راهاندازی میکند، بهجای استخر رشته IO مؤلفههای Arch.رفتار باطلسازی در پوشانندههای داخلی
DataSource(که برای پیادهسازیDataSource.map، و همچنین بار کردنPositionalDataSourceبا جایبان غیرفعالشده استفاده میشود) اصلاح شد b/77237534
نسخه 1.0.0-alpha7
۲۱ مارس ۲۰۱۸
Paging 1.0.0-alpha7 همراه با Lifecycles 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 - همه کلاسهای منسوخشده از API برداشته شده است، ازجمله بقایای بسته
recyclerview.extensionsوLivePagedListProvider. DataSource.Factoryاز میانای به کلاس انتزاعی تغییر کرده است تا عملکرد نقشه فعال شود.
رفع اشکالها
- Builders به final تغییر کرد. b/70848565
- پیادهسازی اتاق
DataSourceاکنون برای مدیریت پُرسمانهای چند جدولی اصلاح شده است - این اصلاح در اتاق 1.1.0-beta1 قرار دارد، به بالا مراجعه کنید. - اشکالی برطرف شد که در آن
BoundaryCallback.onItemAtEndLoadedبرایPositionalDataSourceفراخوانده نمیشد اگر جایبانها فعال باشند و اندازه کل مضربی دقیق از اندازه صفحه باشد.
نسخه 1.0.0-alpha5
۲۲ ژانویه ۲۰۱۸
رفع اشکالها
- رفع مشکل بار کردن صفحه وقتی جایبانها غیرفعال هستند b/70573345
- ثبت گزارش اضافی برای ردیابی اشکال IllegalArgumentException b/70360195 (و اصلاح احتمالی در سمت Room)
- رفع اشکالات کد نمونه Javadoc b/70411933، b/71467637