صفحه بندی
این جدول تمام مصنوعات موجود در گروه androidx.paging را فهرست میکند.
| مصنوع | انتشار پایدار | کاندیدای انتشار | انتشار بتا | انتشار آلفا |
|---|---|---|---|---|
| صفحه بندی-* | ۳.۴.۲ | - | ۳.۵.۰-بتا۰۱ | - |
| صفحه بندی-نوشتن | ۳.۴.۲ | - | ۳.۵.۰-بتا۰۱ | - |
اعلام وابستگیها
برای افزودن یک وابستگی به Paging، باید مخزن Google Maven را به پروژه خود اضافه کنید. برای اطلاعات بیشتر، مخزن Maven گوگل را مطالعه کنید.
وابستگیهای مربوط به مصنوعات مورد نیاز خود را در فایل build.gradle برای برنامه یا ماژول خود اضافه کنید:
شیار
dependencies { def paging_version = "3.4.2" implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for tests testImplementation "androidx.paging:paging-common:$paging_version" // optional - RxJava2 support implementation "androidx.paging:paging-rxjava2:$paging_version" // optional - RxJava3 support implementation "androidx.paging:paging-rxjava3:$paging_version" // optional - Guava ListenableFuture support implementation "androidx.paging:paging-guava:$paging_version" // optional - Jetpack Compose integration implementation "androidx.paging:paging-compose:3.5.0-beta01" }
کاتلین
dependencies { val paging_version = "3.4.2" implementation("androidx.paging:paging-runtime:$paging_version") // alternatively - without Android dependencies for tests testImplementation("androidx.paging:paging-common:$paging_version") // optional - RxJava2 support implementation("androidx.paging:paging-rxjava2:$paging_version") // optional - RxJava3 support implementation("androidx.paging:paging-rxjava3:$paging_version") // optional - Guava ListenableFuture support implementation("androidx.paging:paging-guava:$paging_version") // optional - Jetpack Compose integration implementation("androidx.paging:paging-compose:3.5.0-beta01") }
برای اطلاعات بیشتر در مورد استفاده از افزونههای کاتلین، به مستندات ktx مراجعه کنید.
برای اطلاعات بیشتر در مورد وابستگیها، به بخش «افزودن وابستگیهای ساخت» مراجعه کنید.
بازخورد
بازخورد شما به بهبود Jetpack کمک میکند. اگر مشکلات جدیدی کشف کردید یا ایدههایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبل از ایجاد یک کتابخانه جدید، نگاهی به مشکلات موجود در این کتابخانه بیندازید. میتوانید با کلیک بر روی دکمه ستاره، رأی خود را به یک مشکل موجود اضافه کنید.
برای اطلاعات بیشتر به مستندات ردیاب مشکل مراجعه کنید.
نسخه ۳.۵
نسخه ۳.۵.۰-بتا۰۱
۸ آوریل ۲۰۲۶
androidx.paging:paging-*:3.5.0-beta01 منتشر شد. نسخه 3.5.0-beta01 شامل این کامیتها است.
تغییرات API
- API
Flow<PagingData>.asStateبهFlow<PagingData>.asItemSnapshotListFlowتغییر نام داده است ( I0dc11 , b/496548025 )
نسخه ۳.۵.۰-آلفا۰۱
۱۱ مارس ۲۰۲۶
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همچنین APIهایPager.appendوPager.prependرا برای راهاندازی دستی بارگذاریها در هر دو لبه موارد بارگذاری شده اضافه کرده است.- وقتی با
paging-runtimeیاpaging-composeاستفاده شود، جایگزینی برای بارگذاری دادههای بیشتر علاوه بر پیمایش فراهم میکند. - وقتی با API جدید
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برای بازیابی خطاهای بارگذاری هنگام استفاده ازasStateAPI اضافه شد. برای نمونههای بیشتر از کاربردهای APIهای جدید، به این سند مراجعه کنید. ( I1e1e9 ، If3c87 ، Idbd48 ، Id1e1d ، I816fe )
نسخه ۳.۴
نسخه ۳.۴.۲
۱۱ مارس ۲۰۲۶
androidx.paging:paging-*:3.4.2 منتشر شد. نسخه ۳.۴.۲ شامل این کامیتها است.
بدون تغییر
- این نسخه هیچ تغییر API یا رفتاری نسبت به نسخه ۳.۴.۱ ندارد.
نسخه ۳.۴.۱
۱۱ فوریه ۲۰۲۶
androidx.paging:paging-*:3.4.1 منتشر شد. نسخه ۳.۴.۱ شامل این کامیتها است.
بهروزرسانی وابستگی
- وابستگی guava در paging-guava از نسخه ۳۱.۱ به ۳۲.۰.۱ بهروزرسانی شد.
نسخه ۳.۴.۰
۲۸ ژانویه ۲۰۲۶
androidx.paging:paging-*:3.4.0 منتشر شد. نسخه ۳.۴.۰ شامل این کامیتها است.
تغییرات مهم از زمان انتشار نسخه ۳.۳.۰:
- اهداف KMP بیشتری به
paging-common،paging-testingوpaging-composeاضافه شد. در مجموع، اکنون همه آنها از JVM (اندروید و دسکتاپ)، Native (لینوکس، iOS، watchOS، tvOS، macOS، MinGW) و وب (جاوااسکریپت، WasmJS) پشتیبانی میکنند. -
paging-common،paging-testingوpaging-composeپشتیبانی ازmacosX64،iosX64،watchosX64وtvosX64را حذف کردهاند تا با منسوخ شدن اهداف macosX64 توسط Jetbrains همسو شوند. - یک API جدید
PagingStateclosestItemAroundPositionاضافه شده است تا آیتم بارگذاری شدهای را که به موقعیت هدف نزدیکتر است و با گزاره ورودی مطابقت دارد، بازیابی کند. این میتواند برای تولید کلیدهای بهروزرسانی مبتنی بر آیتم استفاده شود، جایی که آیتم ایدهآل برای لنگر انداختن در اطراف است اما دقیقاً در موقعیت هدف نیست.
نسخه ۳.۴.۰-rc01
۱۴ ژانویه ۲۰۲۶
androidx.paging:paging-*:3.4.0-rc01 منتشر شد. نسخه 3.4.0-rc01 شامل این کامیتها است.
ویژگیهای جدید
- پشتیبانی از پلتفرمهای KMP زیر حذف شد:
macosX64،iosX64،watchosX64وtvosX64تا با منسوخ شدن اهداف macosX64 توسط Jetbrains همسو شود. ( 7cb9a4 )
نسخه ۳.۴.۰-بتا۰۱
۱۷ دسامبر ۲۰۲۵
androidx.paging:paging-*:3.4.0-beta01 منتشر شد. نسخه 3.4.0-beta01 شامل این کامیتها است.
رفع اشکالات
- رفع مشکل مسابقه بین بارگذاری
RecyclerViewوRefreshکه منجر بهIndexOutOfBoundsExceptionدرRecyclerViewمیشد. وقفه در بهروزرسانیهای رابط کاربری به دلیل بارگذاریهای مداومRefreshمیتواند باعث ناهمگامی وضعیت Paging باRecyclerViewشود. این مشکل با تنظیم مجدد Paging به حالت قبل از Refresh در صورت قطع Refresh (یعنی توسط بارگذاری متوالیRefresh) برطرف میشود. ( I771b0 ، b/409809768 )
نسخه ۳.۴.۰-آلفا۰۴
۱۰ سپتامبر ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha04 منتشر شد. نسخه 3.4.0-alpha04 شامل این کامیتها است.
تغییرات API
- یک API جدید
PagingStateclosestItemAroundPositionاضافه شده است تا آیتم بارگذاری شدهای را که به موقعیت هدف نزدیکتر است و با گزاره ورودی مطابقت دارد، بازیابی کند. این میتواند برای تولید کلیدهای بهروزرسانی مبتنی بر آیتم استفاده شود که در آنها آیتم ایدهآل برای لنگر انداختن در اطراف است اما دقیقاً در موقعیت هدف قرار ندارد. ( I96e5c ، b/440187139 )
نسخه ۳.۴.۰-آلفا۰۳
۲۷ آگوست ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha03 منتشر شد. نسخه 3.4.0-alpha03 شامل این کامیتها است.
ویژگیهای جدید
- Paging-common دسکتاپ را به عنوان یک هدف جدید Kotlin Multiplatform (KMP) اضافه کرده است. در مجموع، اکنون از JVM (اندروید و دسکتاپ)، Native (لینوکس، iOS، watchOS، tvOS، macOS، MinGW) و وب (JavaScript، WasmJS) پشتیبانی میکند. ( Id2483 ، b/436884811 )
- بخش Paging-testing، اهداف جدید Kotlin Multiplatform (KMP) را اضافه کرده است. در مجموع، اکنون از JVM (اندروید و دسکتاپ)، Native (لینوکس، iOS، watchOS، tvOS، macOS، MinGW) و وب (جاوااسکریپت، WasmJS) پشتیبانی میکند. ( I0c543 ، b/435014650 )
- Paging-compose اهداف جدید Kotlin Multiplatform (KMP) را اضافه کرده است. در مجموع، اکنون از JVM (اندروید و دسکتاپ)، Native (لینوکس، iOS، watchOS، tvOS، macOS، MinGW) و وب (جاوااسکریپت، WasmJS) پشتیبانی میکند. ( I70d44 , b/436884801 )
تغییرات API
- انتقال minSdk پیشفرض از API 21 به API 23 ( Ibdfca ، b/380448311 ، b/435705964 ، b/435705223 )
نسخه ۳.۴.۰-آلفا۰۲
۳۰ ژوئیه ۲۰۲۵
androidx.paging:paging-*:3.4.0-alpha02 منتشر شد. نسخه 3.4.0-alpha02 شامل این کامیتها است.
تغییرات API
-
PagingData.fromاکنون امکان تنظیمplaceholdersBeforeوplaceholdersAfterرا فراهم میکند. توجه داشته باشید که پیمایش بین این placeholderها باعث بارگذاری نمیشود. ( I06983 )
نسخه ۳.۴.۰-آلفا۰۱
۲ ژوئیه ۲۰۲۵
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 )
رفع اشکالات
- تستهای واحد اندروید که Paging نسخه ۳.۳ یا بالاتر را دریافت میکنند، دیگر از
PagingLogger( Ia9400 ، b/331684448 ) اجرا نخواهند شد. - اشکالی که باعث میشد
RecyclerViewهنگام اسکرول کاربر هنگام بهروزرسانیRecyclerView( Id1f16 ، b/381024738 )IndexOutOfBoundsExceptionصادر کند، برطرف شد. - اشکالی که باعث میشد صفحهبندی هنگام رفرش کردن هنگام اسکرول کردن، نتواند بارگذاریهای بیشتری را انجام دهد، برطرف شد. ( I60ca5 ، b/352586078 )
- مشکل کرش کردن هنگام اسکرول کردن و رفرش کردن آیتمهای صفحهبندی برطرف شد. ( I8c65a ، b/347649763 )
نسخه ۳.۳
نسخه ۳.۳.۶
۱۲ فوریه ۲۰۲۵
androidx.paging:paging-*:3.3.6 منتشر شد. نسخه ۳.۳.۶ شامل این کامیتها است.
رفع اشکالات
- سیگنالهای بهروزرسانی و تلاش مجدد که در طول بهروزرسانی اولیه ارسال میشوند، اکنون ذخیره شده و پس از آماده شدن ارائهدهنده Paging، بهطور خودکار دوباره ارسال میشوند.
مشارکت خارجی
نسخه ۳.۳.۵
۱۱ دسامبر ۲۰۲۴
androidx.paging:paging-*:3.3.5 منتشر شد. نسخه ۳.۳.۵ شامل این کامیتها است.
رفع اشکالات
- اشکالی که باعث میشد
RecyclerViewهنگام اسکرول کاربر هنگام بهروزرسانیRecyclerViewIndexOutOfBoundsExceptionصادر کند، برطرف شد. ( Id1f16 ، b/381024738 )
نسخه ۳.۳.۴
۱۳ نوامبر ۲۰۲۴
androidx.paging:paging-*:3.3.4 منتشر شد. نسخه ۳.۳.۴ شامل این کامیتها است.
رفع اشکالات
- تستهای واحد اندروید که Paging نسخه ۳.۳ یا بالاتر را اجرا میکنند، دیگر خطایی مانند
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یا APIهای ساخته شده روی آن مانندPagingDataAdapterکه باRecyclerViewاستفاده میشود، هنگام رفرش شدن منبع داده پشتیبان هنگام اسکرول کردن، قادر به بارگذاری بیشتر نباشند، برطرف شد. ( I60ca5 ، b/352586078 ) - مشکلی که هنگام اسکرول کردن
RecyclerViewبا استفاده ازPagingDataAdapterیاAsyncPagingDataDifferو حذف آیتمها از منبع داده پشتیبان رخ میداد، برطرف شد. ( I8c65a ، b/347649763 )
نسخه ۳.۳.۰
۱۴ مه ۲۰۲۴
androidx.paging:paging-*:3.3.0 منتشر شد. نسخه ۳.۳.۰ شامل این کامیتها است.
تغییرات مهم از زمان ۳.۲.۰
-
PagingDataPresenterاکنون یک کلاس عمومی است. ارائهدهندههای چندسکویی اکنون میتوانند بر رویPagingDataPresenterساخته شوند، به جای اینکه به APIهای داخلی Paging یاAsyncPagingDataDifferازpaging-runtimeنیاز داشته باشند. - متدهای کمکی جدید
LoadStatesوCombinedLoadStatesدرhasErrorوisIdleاضافه شدهاند تا بررسی کنند کهLoadStatesبه ترتیب در حالت خطا یاNotLoadingاست. همچنین یک متد الحاقی کاتلین جدیدawaitNotLoading()رویFlow<CombinedLoadStates>اضافه شده است که منتظر میماند تا بارگذاری در حالتNotLoadingیا خطا قرار گیرد. -
PagingData.empty()اکنون به طور پیشفرض حالتهایNotLoadingارسال میکند، مگر اینکهLoadStatesسفارشی به سازندهاش ارسال شوند. این با رفتار فعلی که هنگام ارسال بهPagingDataAdapterLoadStatesارسال نمیکرد یا حالتهای Loading را هنگام جمعآوری به عنوانLazyPagingItemsارسال میکرد، متفاوت است. هنگامی که به عنوانLazyPagingItemsجمعآوری میشود، اکنون بلافاصله پس از ترکیب اولیه، یک لیست خالی نیز نمایش میدهد.
سازگاری چند پلتفرمی کاتلین
Paging اکنون مصنوعاتی سازگار با Kotlin Multiplatform ارائه میدهد، که بخش عمدهای از آن به لطف کار بالادستی پروژه چند پلتفرمی-صفحهبندی CashApp است.
-
paging-commonتمام APIهای Paging 3 را بهcommonمنتقل کرده است و اکنون علاوه بر اندروید با jvm و iOS نیز سازگار است. -
paging-testingکد خود را بهcommonمنتقل کرده و اکنون علاوه بر اندروید با jvm و iOS نیز سازگار است. -
paging-composeکد خود را بهcommonمنتقل کرده و یک مصنوع اندروید ارائه میدهد که با پشتیبانی چند پلتفرمیandroidx.composeمطابقت دارد. -
paging-runtime،paging-guava،paging-rxjava2وpaging-rxjava3فقط برای اندروید باقی خواهند ماند.
نسخه ۳.۳.۰-rc01
۱ مه ۲۰۲۴
androidx.paging:paging-*:3.3.0-rc01 بدون هیچ تغییری در Paging 3.3.0-beta01 منتشر شده است. نسخه 3.3.0-rc01 شامل این کامیتها است.
نسخه ۳.۳.۰-بتا۰۱
۳ آوریل ۲۰۲۴
androidx.paging:paging-*:3.3.0-beta01 بدون هیچ تغییر قابل توجهی منتشر شده است. نسخه 3.3.0-beta01 شامل این کامیتها است.
نسخه ۳.۳.۰-آلفا۰۵
۲۰ مارس ۲۰۲۴
androidx.paging:paging-*:3.3.0-alpha05 منتشر شد. نسخه 3.3.0-alpha05 شامل این کامیتها است.
تغییرات API
- صفحهبندی اکنون از حاشیهنویسی AndroidX Annotation
@MainThreadبرای کد مشترک استفاده میکند. ( I78f0d , b/327682438 )
نسخه ۳.۳.۰-آلفا۰۴
۶ مارس ۲۰۲۴
androidx.paging:paging-*:3.3.0-alpha04 منتشر شد. نسخه 3.3.0-alpha04 شامل این کامیتها است.
رفع اشکالات
- خطاهای جزئی مستندات مربوط به اضافه شدن سازگاری چند پلتفرمی کاتلین برطرف شد. ( aosp/2950785 )
نسخه ۳.۳.۰-آلفا۰۳
۷ فوریه ۲۰۲۴
androidx.paging:paging-*:3.3.0-alpha03 منتشر شد. نسخه 3.3.0-alpha03 شامل این کامیتها است.
ویژگیهای جدید
-
PagingDataPresenterاکنون یک کلاس عمومی است. ارائهدهندههای چندسکویی اکنون میتوانند بر رویPagingDataPresenterساخته شوند، به جای اینکه به APIهای داخلی Paging یاAsyncPagingDataDifferمربوط بهpaging-runtimeنیاز داشته باشند. ( Id1f74 ، b/315214786 ) - متدهای کمکی جدید
LoadStatesوCombinedLoadStatesبرای بررسی اینکهLoadStatesدر حالت خطا یاNotLoadingاست، اضافه شد. همچنین یک API جدید اضافه شد که تا زمانی که بارگذاری در حالتNotLoadingیا خطا قرار نگیرد، رویLoadStateFlowمنتظر میماند. ( Id6c67 )
تغییر رفتار
-
PagingData.empty()اکنون به طور پیشفرض حالتهایNotLoadingارسال میکند، مگر اینکهLoadStatesسفارشی به سازندهاش ارسال شوند. این با رفتار موجود که در آنLoadStatesهنگام ارسال بهPagingDataAdapterارسال نمیکرد یا حالتهای Loading را هنگام جمعآوری به عنوانLazyPagingItemsارسال میکرد، متفاوت است. هنگامی که به عنوانLazyPagingItemsجمعآوری میشود، اکنون بلافاصله پس از ترکیب اولیه، یک لیست خالی نیز نمایش میدهد. ( I4d11d , b/301833847 )
نسخه ۳.۳.۰-آلفا۰۲
۲۰ سپتامبر ۲۰۲۳
androidx.paging:paging-*:3.3.0-alpha02 منتشر شد. نسخه 3.3.0-alpha02 شامل این کامیتها است.
سازگاری چند پلتفرمی کاتلین
Paging اکنون مصنوعاتی سازگار با Kotlin Multiplatform ارائه میدهد که بخش عمده آن به لطف کار بالادستی پروژه چند پلتفرمی-صفحهبندی CashApp است. این امر به ما امکان میدهد از واگرایی بین دو مخزن جلوگیری کرده و آنها را سازگار نگه داریم.
-
paging-commonتمام APIهای Paging 3 را بهcommonمنتقل کرده است و اکنون علاوه بر اندروید با jvm و iOS نیز سازگار است. -
paging-testingکد خود را بهcommonمنتقل کرده و اکنون علاوه بر اندروید با jvm و iOS نیز سازگار است. -
paging-composeکد خود را بهcommonمنتقل کرده و یک مصنوع اندروید ارائه میدهد که با پشتیبانی چند پلتفرمیandroidx.composeمطابقت دارد. -
paging-runtime،paging-guava،paging-rxjava2وpaging-rxjava3فقط برای اندروید باقی خواهند ماند.
تغییرات API
- رابط عمومی Logger که فقط برای استفاده داخلی در نظر گرفته شده بود، منسوخ شده است ( I16e95 ، b/288623117 )
مشارکت خارجی
- با تشکر از وِیندان از Cash App برای کمک به انتقال صفحهبندی به کاتلین چندسکویی ( #560 ، #561 ، #562 ، #573 ، #576 ، #577 ، #578 ، #579 ، # 580 ، #581، #583 ، # 584 ، #586 ، #609 )
نسخه ۳.۳.۰-آلفا۰۱
۲۰ سپتامبر ۲۰۲۳
- این اولین نسخه چند پلتفرمی از کتابخانههای androidx.paging است. این نسخه فقط دارای مصنوعات
*-jvmو*-androidاست. برای انواع macOS، iOS و لینوکس،3.3.0-alpha02استفاده کنید.
نسخه ۳.۲
نسخه ۳.۲.۱
۶ سپتامبر ۲۰۲۳
androidx.paging:paging-*:3.2.1 منتشر شد. نسخه ۳.۲.۱ شامل این کامیتها است.
رفع اشکالات
- مشکلی که باعث میشد API مربوط به
asSnapshot()مربوط به مصنوع Paging Testing هنگام ارسال یک Flow ساخته شده با استفاده ازPagingData.from(List)هنگ کند، برطرف شد، زیراasSnapshot()هیچ اطلاعاتی در مورد زمان اتمام بارگذاری نداشت (برخلاف سربارPagingData.from(List, LoadStates)). این راه حل فقط برای جریانهای قابل تکمیل (مثلاًflowOf(PagingData.from(...))) کار میکند. برای جریانهای غیرقابل تکمیل (مثلاًMutableStateFlow، از سربارPagingData.fromکهLoadStatesرا ارائه میدهد استفاده کنید). ( I502c3 ) - اکنون Paging Compose به صورت داخلی از
AndroidUiDispatcher.Mainاستفاده میکند تا اطمینان حاصل شود که دادههای جدید در همان فریم پس از اتمام بارگذاری در دسترس هستند. ( Ia55af )
نسخه ۳.۲.۰
۲۶ ژوئیه ۲۰۲۳
androidx.paging:paging-*:3.2.0 منتشر شد. نسخه ۳.۲.۰ شامل این کامیتها است.
تغییرات مهم از زمان ۳.۱.۰
- Paging Compose به پایداری API رسیده و دوباره با بقیه Paging ادغام شده است، جایی که نسخه آن اکنون با تمام مصنوعات Paging دیگر مطابقت دارد. تغییرات از نسخه ۳.۱.۰ عبارتند از:
- پشتیبانی از پیشنمایش لیستی از دادههای جعلی با ایجاد یک
PagingData.from(fakeData)و قرار دادن آنPagingDataدر یکMutableStateFlow(به عنوان مثالMutableStateFlow(PagingData.from(listOf(1, 2, 3)))). این جریان را به عنوان گیرنده برایcollectAsLazyPagingItems()برای پیشنمایش، به composables@PreviewPreview ارسال کنید. - پشتیبانی از تمام طرحبندیهای تنبل مانند
LazyVerticalGridوHorizontalPagerو همچنین کامپوننتهای تنبل سفارشی از کتابخانههای Wear و TV. این امر از طریق متدهای افزونه جدید سطح پایینترLazyPagingItemsitemKeyوitemContentTypeحاصل شده است که به شما کمک میکند پارامترهایkeyوcontentTypeرا در APIهای استانداردitemsکه از قبل برایLazyColumn،LazyVerticalGridو همچنین معادلهای آنها در APIهایی مانندHorizontalPagerوجود دارند، پیادهسازی کنید. -
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)که فقط ازLazyListScopeپشتیبانی میکنند، منسوخ شدهاند.
- پشتیبانی از پیشنمایش لیستی از دادههای جعلی با ایجاد یک
- محصول جدید
paging-testingکه APIهایی را ارائه میدهد که حول محور تست واحد هر لایه از برنامه شما و ادغام آن با صفحهبندی به صورت جداگانه طراحی شدهاند. به عنوان مثال، شامل موارد زیر است:- کلاس
TestPagerکه به شما امکان میدهد رفتار پیادهسازی سفارشیPagingSourceخود را مستقل از Pager و رابط کاربری واقعی اعتبارسنجی کنید. - APIهای
asPagingSourceFactoryبرای تبدیل یکFlow<List<Value>>یا یکList<Value>استاتیک به یکPagingSourceFactoryکه میتواند در تستها به یک Pager ارسال شود. - افزونهی کاتلین
asSnapshotرویFlow<PagingData<Value>>کهFlow<PagingData<Value>>را به یکList<Value>مستقیم تبدیل میکند.asSnapshot lambdaبه شما امکان میدهد رابط کاربری برنامه خود را از طریق APIهایی مانندscrollToیاappendScrollWhileتقلید کنید تا بتوانید صحت snapshot دادهها را در هر نقطه از مجموعه دادههای صفحهبندی شده خود تأیید کنید.
- کلاس
- لاگهای پیشفرض برای نمایش اطلاعات اشکالزدایی صفحهبندی در دو سطح اضافه شدهاند:
VERBOSEوDEBUG. لاگها را میتوان از طریق دستورadb shell setprop log.tag.Paging [DEBUG|VERBOSE]فعال کرد. این موضوع هم برای صفحهبندی با نماها و هم برای صفحهبندی با Compose صدق میکند. - سازندههایی برای
PagingDataAdapterوAsyncPagingDataDifferاضافه شده است که به جایCoroutineDispatcherCoroutineContextمیپذیرند. - یک رابط تابعی جدید
PagingSourceFactoryاضافه شده است که سطح API صریحتری نسبت به لامبداهای قبلی () ->PagingSourceارائه میدهد. این کارخانه میتواند برای نمونهسازی یک Pager استفاده شود.
نسخه ۳.۲.۰-rc01
۲۱ ژوئن ۲۰۲۳
androidx.paging:paging-*:3.2.0-rc01 منتشر شد. نسخه 3.2.0-rc01 شامل این کامیتها است.
مشارکت خارجی
- از ویندان به خاطر کمکش در دور کردن صفحهبندی از جزئیات اندروید/JVM متشکرم. ( #553 ، #554 ، #555 ، #559 )
نسخه ۳.۲.۰-بتا۰۱
۷ ژوئن ۲۰۲۳
androidx.paging:paging-*:3.2.0-beta01 منتشر شد. نسخه 3.2.0-beta01 شامل این کامیتها است.
صفحه بندی
- Paging Compose رسماً به پایداری API رسیده است. به همین ترتیب، نسخه از
1.0.0-alpha20بهروزرسانی شده است تا اکنون با نسخه سایر مصنوعات Paging مطابقت داشته باشد.
تغییرات API
- APIهای منسوخشده
items(LazyPagingItems)وitemsIndexed(LazyPagingItems)از Paging Compose حذف شدند. برای مثالی از APIهای جایگزین آنها، به یادداشتهای انتشار Paging Compose1.0.0-alpha20مراجعه کنید. ( I9626e )
نسخه ۳.۲.۰-alpha06
۲۴ مه ۲۰۲۳
androidx.paging:paging-*:3.2.0-alpha06 منتشر شد. نسخه 3.2.0-alpha06 شامل این کامیتها است.
ویژگیهای جدید
- یک رابط تابعی جدید
PagingSourceFactoryاضافه شده است که سطح API صریحتری نسبت به لامبداهای موجود() -> PagingSourceارائه میدهد. این کارخانه میتواند برای نمونهسازی یکPagerاستفاده شود. ( I33165 ، b/280655188 ) - API جدید
paging-testingList<Value>.asPagingSourceFactory()برای دریافتPagingSourceFactoryکه فقط از یک لیست تغییرناپذیر از دادهها بارگیری میشود، اضافه شد. افزونه موجود درFlow<List<Value>>همچنان باید برای آزمایش با چندین نسل از دادههای استاتیک استفاده شود. ( Id34d1 ، b/280655188 )
تغییرات API
- اکنون تمام APIهای عمومی در تست صفحهبندی با
@VisibleForTestingحاشیهنویسی میشوند تا اطمینان حاصل شود که این APIها فقط در تستها استفاده میشوند. ( I7db6e ) - API
asSnapshotدیگر نیازی به ارسالCoroutineScopeندارد. اکنون به طور پیشفرض از context به ارث رسیده از scope والد خود استفاده میکند. ( Id0a78 , b/282240990 ) - پارامترهای سازنده
TestPagerدوباره مرتب شدند تا به طور شهودی با ترتیب پارامترهای سازندهPagerواقعی مطابقت داشته باشند ( I6185a ) - استفادهی تست صفحهبندیِ منتقلشده از نوع lambda
() -> PagingSource<Key, Value>برای تایپPagingSourceFactory<Key, Value>. ( I4a950 ، b/280655188 )
تغییرات رفتاری
- دیگر نیازی به اجرای تستهای
asSnapshotPaging توسط توزیعکننده اصلی نیست. تنظیم آن دیگر هیچ تغییری در رفتار تست ایجاد نمیکند. ( Ie56ea )
نسخه ۳.۲.۰-آلفا۰۵
۳ مه ۲۰۲۳
androidx.paging:paging-*:3.2.0-alpha05 منتشر شد. نسخه 3.2.0-alpha05 شامل این کامیتها است.
تغییرات API
- API تست صفحهبندی
asSnapshotاکنون پارامترloadOperationsخود را به صورت پیشفرض روی یک لامبدا خالی تنظیم میکند. این امر امکان فراخوانیasSnapshotرا بدون ارسال هیچ عملیات بارگذاری برای بازیابی دادهها از بارگذاری اولیه رفرش فراهم میکند. ( Ied354 ، b/277233770 )
بهبودهای مستندات
- مستندات مربوط به
asPagingSourceFactory()بهروزرسانی شد تا روشن شود که این یک متد الحاقی روی یکFlowاست که یک factory قابل استفاده مجدد برای تولید نمونههایPagingSourceبرمیگرداند. ( I5ff4f ، I705b5 ) - مستندات مربوط به سازنده
LoadResult.Pageبهروزرسانی شد تا نیاز به بازنویسیitemsBeforeوitemsAfterبرای پشتیبانی از پرش روشن شود. ( Ied354 )
مشارکتهای خارجی
- از ویندان به خاطر کمکش در دور کردن صفحهبندی از جزئیات اندروید/JVM متشکرم. ( #525 , #523 , #520 , #519 , # 507 , # 506 , #505 , #499 , #497 , #496 , #493 )
نسخه ۳.۲.۰-آلفا۰۴
۸ فوریه ۲۰۲۳
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با APIهای جدید مناسب برای تأیید صحت دادههای موجود درFlow<PagingData<T>>گسترش یافته است. برای مثال، میتوان از این ابزار برای تأیید خروجیFlow<PagingData<T>>از لایه ViewModel خود استفاده کرد.این کار از طریق افزونه
asSnapshotکاتلین رویFlow<PagingData<Value>>انجام میشود کهFlow<PagingData<Value>>را به یکList<Value>مستقیم تبدیل میکند. لامبدایasSnapshotبه شما امکان میدهد رابط کاربری برنامه خود را از طریق APIهایی مانندscrollToیاappendScrollWhileبه روشی تکرارپذیر و سازگار تقلید کنید تا بتوانید صحت snapshot دادهها را در هر نقطه از مجموعه دادههای صفحهبندی شده خود تأیید کنید.// 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 valuesasSnapshotیک متدsuspendاست که انتظار میرود درونrunTestاجرا شود. برای اطلاعات بیشتر به بخش «آزمایش کوروتینهای کاتلین روی اندروید» مراجعه کنید. ( I55fd2 ، I5bd26 ، I7ce34 ، I51f4d ، I2249f ، Id6223 ، Ic4bab ، Ib29b9 ، Ic1238 ، I96def ، b/235528239 )
تغییرات API
- فراخوانیهای رابط کاربری برای
getItemوpeekدرAsyncPagingDataDifferوPagingDataAdapterاکنون به درستی به عنوان فقط قابل فراخوانی در نخ اصلی علامتگذاری شدهاند. ( I699b6 ) - کاراکترهای عمومی (wildcards) از انواع داده عمومی مورد استفاده توسط
TestPagerحذف شدند و استفاده از نتایج این متدها در کد نوشته شده به زبان برنامهنویسی جاوا آسانتر شد. ( I56c42 )
نسخه ۳.۲.۰-آلفا۰۳
۲۴ اکتبر ۲۰۲۲
androidx.paging:paging-*:3.2.0-alpha03 منتشر شد. نسخه 3.2.0-alpha03 شامل این کامیتها است.
تست صفحه بندی
این نسخه شامل یک مصنوع جدید به نام paging-testing است. این مصنوع، APIهایی را ارائه میدهد که حول محور تست واحد هر لایه از برنامه شما و ادغام آن با Paging به صورت جداگانه طراحی شدهاند.
برای مثال، این اولین نسخه شامل یک کلاس TestPager است که به شما امکان میدهد رفتار پیادهسازی سفارشی PagingSource خود را مستقل از Pager و رابط کاربری واقعی که معمولاً برای شبیهسازی یکپارچهسازی صفحهبندی سرتاسری نیاز دارید، اعتبارسنجی کنید.
TestPager باید یک جعلی در نظر گرفت - یک تست دابل که پیادهسازی واقعی Pager را منعکس میکند و در عین حال یک سطح API سادهشده برای تست PagingSource ارائه میدهد. این APIها، APIهای suspend هستند و باید درون runTest اجرا شوند، همانطور که در راهنمای «تست کوروتینهای کاتلین روی اندروید» آمده است.
نمونهای از این APIهای مورد استفاده را میتوان در تستهای room-paging یافت که برای استفاده TestPager بازسازی شدهاند.
تغییرات API
- تکرار راحت روی
LoadResult.Page.dataاز طریقLoadResult.Page.iterator()فعال میکند. این به طور غیرمستقیم امکان استفاده از متدflattenکتابخانه استاندارد کاتلین را هنگام دریافتList<LoadResult.Page>فراهم میکند، مانند خاصیتpagesازPagingStateکه به متدPagingSource.getRefreshKeyارسال میشود. ( Ie0718 )
نسخه ۳.۲.۰-آلفا۰۲
۱۰ آگوست ۲۰۲۲
androidx.paging:paging-*:3.2.0-alpha02 منتشر شد. نسخه 3.2.0-alpha02 شامل این کامیتها است.
ویژگیهای جدید
- صفحهبندی اکنون از طریق کلاسهای
AsyncPagingDataDifferیاPagingDataAdapterلاگهایی را ارائه میدهد تا اطلاعات اشکالزدایی جمعآوریشده ازPagingDataرا نمایش دهد. - گزارشها را میتوان از طریق دستور
adb shelladb shell setprop log.tag.Paging [DEBUG|VERBOSE].( b/235527159 )
رفع اشکالات
- خطای از دست رفتن سازنده
PagingDataDifferهنگام استفاده ازpaging-common:3.2.0-alpha01باpaging-runtime:3.1.1یا قدیمیتر ( b/235256201 ) برطرف شد.
نسخه ۳.۲.۰-آلفا۰۱
۱ ژوئن ۲۰۲۲
androidx.paging:paging-*:3.2.0-alpha01 منتشر شد. نسخه 3.2.0-alpha01 شامل این کامیتها است.
تغییرات API
- سازندههایی برای
PagingDataAdapterوAsyncPagingDataDifferاضافه شده است که به جایCoroutineDispatcherCoroutineContextمیپذیرند. ( Idc878 ) - به طور پیشفرض،
PagingData.from()وPagingData.empty()دیگر برCombinedLoadStatesدر سمت Presenter تأثیری نخواهند گذاشت. یک overload جدید که امکان ارسالsourceLoadStatesوremoteLoadStatesرا به این سازندهها فراهم میکند، اضافه شده است تا رفتار موجود در تنظیمLoadStatesبه صورت کاملاً ترمینالی (یعنیNotLoading(endOfPaginationReached = false)) را حفظ کند، با این گزینه که در صورت نیاز، حالتهای ریموت را نیز شامل شود. اگرLoadStatesارسال نشود،CombinedLoadStatesقبلی هنگام دریافتPagingDataاستاتیک در سمت Presenter حفظ خواهد شد. ( Ic3ce5 , b/205344028 )
رفع اشکالات
- نتیجهی
PagingSource.getRefreshKey()اکنون در مواردی که مقدار null برمیگرداند، اماinitialKeyغیر null تنظیم شده است، به درستی برinitialKeyاولویتبندی میشود. ( Ic9542 ، b/230391606 )
مشارکت خارجی
- بهروزرسانیشده در :compose:ui:ui-test api (updateApi) به دلیل مهاجرت test-coroutines-lib ( I3366d )
نسخه ۳.۱
نسخه ۳.۱.۱
۹ مارس ۲۰۲۲
androidx.paging:paging-*:3.1.1 منتشر شد. نسخه 3.1.1 شامل این کامیتها است.
رفع اشکالات
- رویدادهای
LoadState.NotLoadingمیانی بین نسلهایی که به اشتباه توسط.cachedIn()درج شده بودند، حذف شدند. این تغییر با حذف رویدادهایLoadState.NotLoadingتکراری که بین تلاشهای مجدد برای بارگذاریهای ناموفق، هنگام بهروزرسانی یا در طول نامعتبرسازی ایجاد میشدند، واکنش به تغییراتLoadStateرا بسیار آسانتر میکند.
نسخه ۳.۱.۰
۱۷ نوامبر ۲۰۲۱
androidx.paging:paging-*:3.1.0 منتشر شد. نسخه ۳.۱.۰ شامل این کامیتها است.
تغییرات مهم از زمان ۳.۰.۰
- APIهای
Flow<PagingData>.observableوFlow<PagingData>.flowableدیگر آزمایشی نیستند. - تغییرات رفتاری در
LoadState:-
endOfPaginationReachedاکنون برایLoadType.REFRESHهم برایPagingSourceو همRemoteMediatorهمیشهfalseاست. -
LoadStatesاز Paging اکنون قبل از انتشار در پاییندست، منتظر مقادیر معتبر ازPagingSourceوRemoteMediatorمیماند. نسلهای جدیدPagingDataاکنون همیشه به درستی باLoadingfor refresh state شروع میشوند، به جای اینکه در برخی موارد به اشتباه بهNotLoadingتنظیم مجدد شوند. -
.loadStateFlowو.addLoadStateListenerدر APIهای ارائهدهنده، دیگر به طور زائدCombinedLoadStatesاولیه را که همیشه حالتهای واسطه رویnullتنظیم شده است، ارسال نمیکنند.
-
- لغو در نسلهای گذشته اکنون به سرعت در هنگام نامعتبرسازی/نسلهای جدید اتفاق میافتد. دیگر نیازی به استفاده از
.collectLatestدرFlow<PagingData>نیست، اگرچه هنوز هم توصیه میشود این کار را انجام دهید. -
PagingSource.LoadResult.Invalidبه عنوان یک نوع بازگشتی جدید ازPagingSource.loadاضافه شده است، که باعث میشود Paging هرگونه درخواست بارگذاری در حال انتظار یا آینده به اینPagingSourceرا رد کرده و آن را نامعتبر کند. این نوع بازگشتی برای مدیریت دادههای نامعتبر یا قدیمی که میتوانند از پایگاه داده یا شبکه بازگردانده شوند، طراحی شده است. - APIهای ارائهدهندهی
.onPagesPresentedو.addOnPagesUpdatedListenerاضافه شدهاند که همزمان با ارائه صفحات در رابط کاربری، فعال میشوند. بهروزرسانیهای صفحه میتوانند در سناریوهای زیر اتفاق بیفتند:- بارگذاری اولیهی نسل جدیدی از PagingData، صرف نظر از اینکه آیا نسل جدید شامل تغییراتی در موارد ارائه شده است یا خیر، تکمیل میشود. یعنی، نسل جدیدی که بارگذاری اولیه را بدون هیچ بهروزرسانی انجام میدهد، زیرا لیست دقیقاً یکسان است، همچنان این فراخوانی را آغاز میکند.
- یک صفحه درج شده است، حتی اگر صفحه درج شده حاوی هیچ مورد جدیدی نباشد.
- یک صفحه حذف میشود، حتی اگر صفحه حذف شده خالی باشد.
نسخه ۳.۱.۰-rc01
۳ نوامبر ۲۰۲۱
androidx.paging:paging-*:3.1.0-rc01 منتشر شد. نسخه 3.1.0-rc01 شامل این کامیتها است.
رفع اشکالات
- مشکل شرایط رقابتی + نشت حافظه در .cachedIn() در مواردی که چندین رویداد بارگذاری توسط Paging downstream ارسال میشد در حالی که هیچ ناظری وجود نداشت یا بین زمانی که یک ناظر در حال تغییر به یک PagingData جدید بود، برطرف شد. ( Ib682e )
نسخه ۳.۱.۰-بتا۰۱
۱۳ اکتبر ۲۰۲۱
androidx.paging:paging-*:3.1.0-beta01 منتشر شد. نسخه 3.1.0-beta01 شامل این کامیتها است.
رفع اشکالات
- مشکلی که باعث میشد دسترسیهای سریع به آیتمهای زیاد، باعث حذف آنها برای بررسی در prefetchDistance شود و باعث توقف بارگذاری صفحه شود، برطرف شد. این مشکل به ویژه زمانی پیش میآید که آیتمهای زیادی به طور همزمان و به ترتیبی چیده شده باشند که اولویت بارگذاری را بر اساس جهت اسکرول کاربر تعیین کند. این دسترسیهای به آیتمها اکنون بافر شده و به صورت همزمان اولویتبندی میشوند تا از حذف آنها جلوگیری شود. ( aosp/1833273 )
نسخه ۳.۱.۰-آلفا۰۴
۲۹ سپتامبر ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha04 منتشر شد. نسخه 3.1.0-alpha04 شامل این کامیتها است.
تغییرات API
- APIهای
Flow<PagingData>.observableوFlow<PagingData>.flowableدیگر آزمایشی نیستند. ( Ie0bdd )
رفع اشکالات
- برای LoadStates،
endOfPaginationReachedاکنون برایLoadType.REFRESHهمیشهfalseاست. پیش از این، endOfPaginationReached برای RemoteMediatorREFRESHمیتوانستtrueباشد، اما برای PagingSource اینطور نبود. این رفتار اکنون طوری تنظیم شده است که همیشهfalseبرگرداند زیرا هرگز منطقی نیست که REFRESH ترمینال باشد و اکنون به عنوان بخشی از قرارداد API در LoadStates مستند شده است. هنگام تصمیمگیری در مورد خاتمه صفحهبندی، همیشه باید این کار را با توجه به دستورالعملهای APPEND یا PREPEND انجام دهید. ( I047b6 ) LoadStates از Paging اکنون قبل از انتشار downstream بین نسلها، منتظر مقادیر معتبر از PagingSource و RemoteMediator میماند. این امر مانع از آن میشود که نسلهای جدید PagingData در CombinedLoadStates.source.refresh، اگر از قبل در حال بارگذاری بوده است، NotLoading ارسال کنند. نسلهای جدید PagingData اکنون همیشه به درستی با Loading for refresh شروع میشوند، به جای اینکه در برخی موارد ابتدا به اشتباه به NotLoading تنظیم مجدد شوند.
لغو در نسلهای گذشته اکنون به راحتی در هنگام نامعتبرسازی/نسلهای جدید اتفاق میافتد. دیگر نیازی به استفاده از .collectLatest در
Flow<PagingData>نیست، اگرچه هنوز هم اکیداً توصیه میشود که این کار را انجام دهید. ( I0b2b5 ، b/177351336 ، b/195028524 ).loadStateFlowو.addLoadStateListenerدر APIهای ارائهدهنده، دیگر به طور زائدCombinedLoadStatesاولیه را که همیشه حالتهای واسطه رویnullو حالتهای منبع رویNotLoading(endOfPaginationReached = false)تنظیم شده است، ارسال نمیکنند. این به این معنی است که:- اگر از RemoteMediator استفاده کنید، وضعیتهای میانجی همیشه پر میشوند.
- ثبت یک شنوندهی loadState جدید یا یک جمعکنندهی جدید روی
.loadStateFlow دیگر در صورتی کهCombinedLoadStatesواقعی را ازPagingDataدریافت نکرده باشد، مقدار فعلی را فوراً منتشر نمیکند. این اتفاق میتواند زمانی رخ دهد که یک جمعکننده یا جمعکننده قبل از ارسالPagingDataشروع به کار کند. ( I1a748 )
نسخه ۳.۱.۰-alpha03
۲۱ ژوئیه ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha03 منتشر شد. نسخه 3.1.0-alpha03 شامل این کامیتها است.
تغییرات API
نوع بازگشتی سوم LoadResult با نام LoadResult.Invalid به PagingSource اضافه میشود. وقتی PagingSource.load مقدار LoadResult.Invalid را برمیگرداند، paging دادههای بارگذاری شده را دور میریزد و PagingSource را نامعتبر میکند. این نوع بازگشتی برای مدیریت دادههای نامعتبر یا قدیمی که میتوانند از پایگاه داده یا شبکه بازگردانده شوند، طراحی شده است.
برای مثال، اگر پایگاه دادهی اصلی در آن نوشته شود اما PagingSource به موقع نامعتبر نشود، اگر پیادهسازی آن به تغییرناپذیری مجموعه دادهی پشتیبان که از آن بارگذاری میشود بستگی داشته باشد (مثلاً پیادهسازیهای پایگاه دادهی سبک LIMIT OFFSET)، ممکن است نتایج متناقضی را برگرداند. در این سناریو، توصیه میشود پس از بارگذاری، نامعتبر بودن بررسی شود و LoadResult.Invalid برگردانده شود، که باعث میشود Paging هرگونه درخواست بارگذاری در حال انتظار یا آینده به این PagingSource را رد کند و آن را نامعتبر کند.
این نوع بازگشتی همچنین توسط Paging2 API که از LivePagedList یا RxPagedList بهره میبرد، پشتیبانی میشود. هنگام استفاده از PagingSource با APIهای PagedList مربوط به Paging2، PagedList بلافاصله جدا میشود و تلاشهای بیشتر برای بارگذاری دادهها در این PagedList را متوقف میکند و باعث نامعتبرسازی در PagingSource میشود.
LoadResult یک کلاس مهر و موم شده است، به این معنی که این یک تغییر ناسازگار با منبع است، به طوری که موارد استفادهای که مستقیماً از نتایج PagingSource.load استفاده میکنند، باید LoadResult.Invalid را در زمان کامپایل مدیریت کنند. به عنوان مثال، کاربران Kotlin که از exhaustive-when برای بررسی نوع بازگشتی استفاده میکنند، باید یک بررسی برای نوع Invalid اضافه کنند. ( Id6bd3 ، b/191806126 ، b/192013267 )
رفع اشکالات
- فراخوانیهای نامعتبرسازی که از طریق PagingSource.registerInvalidatedCallback یا DataSource.addInvalidatedCallback اضافه شدهاند، اکنون اگر در یک PagingSource / DataSource که از قبل نامعتبر بوده ثبت شده باشند، به طور خودکار فعال میشوند. این کار، مشکل رقابتی که باعث میشد Paging سیگنالهای نامعتبرسازی را رها کند و در هنگام ارائه منبعی که در طول بارگذاری اولیه نامعتبر بوده، گیر کند را برطرف میکند. علاوه بر این، فراخوانیهای نامعتبرسازی اکنون پس از فعال شدن به درستی حذف میشوند، زیرا تضمین میشود که حداکثر یک بار فراخوانی شوند. ( I27e69 )
- ارسال مقدار اولیهی placeholder (InitialPagedList) از یک جریان PagedList که به تازگی نمونهسازی شده است، مثلاً LivePagedListBuilder یا RxPagedListBuilder، دیگر دادههای بارگذاری شدهی قبلی را پاک نمیکند.
نسخه ۳.۱.۰-آلفا۰۲
۱ ژوئیه ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha02 منتشر شد. نسخه 3.1.0-alpha02 شامل این کامیتها است.
ویژگیهای جدید
رابطهای برنامهنویسی شنونده و ارائهدهنده جریان onPagesPresented اضافه شدند که بلافاصله پس از بهروزرسانی صفحات ارائه شده در رابط کاربری فعال میشوند.
از آنجایی که این بهروزرسانیها با رابط کاربری همزمان هستند، میتوانید متدهای آداپتور مانند .snapshot و .getItemCount را برای بررسی وضعیت پس از اعمال بهروزرسانی فراخوانی کنید. توجه داشته باشید که .snapshot() به صورت صریح فراخوانی شده است زیرا انجام آن در هر بهروزرسانی میتواند پرهزینه باشد.
بهروزرسانیهای صفحه میتوانند در سناریوهای زیر اتفاق بیفتند:
- بارگذاری اولیهی نسل جدیدی از PagingData، صرف نظر از اینکه آیا نسل جدید شامل تغییراتی در موارد ارائه شده است یا خیر، تکمیل میشود. یعنی، نسل جدیدی که بارگذاری اولیه را بدون هیچ بهروزرسانی انجام میدهد، زیرا لیست دقیقاً یکسان است، همچنان این فراخوانی را آغاز میکند.
- یک صفحه درج شده است، حتی اگر صفحه درج شده حاوی هیچ مورد جدیدی نباشد
- یک صفحه حذف میشود، حتی اگر صفحه حذف شده خالی باشد ( I272c9 , b/189999634 )
رفع اشکالات
- دسترسی به PagedList.dataSource از مقدار اولیه تولید شده توسط LivePagedList یا RxPagedList دیگر به اشتباه خطای IllegalStateException ( I96707 ) را صادر نمیکند.
نسخه ۳.۱.۰-آلفا۰۱
۲ ژوئن ۲۰۲۱
androidx.paging:paging-*:3.1.0-alpha01 منتشر شد. نسخه 3.1.0-alpha01 شامل این کامیتها است.
تغییرات API
- کلاسهای ارائه شده توسط
paging-rxjava3اکنون تحت بستهandroidx.paging.rxjava3قرار میگیرند تا باpaging-rxjava2( Ifa7f6 ) تداخل نداشته باشند.
رفع اشکالات
- مشکلی که باعث میشد Paging گاهی اوقات رویدادهای no-op different را به RecyclerView ارسال کند، برطرف شد. این امر میتوانست باعث شود برخی از listenerها زودتر فعال شوند. ( Ic507f ، b/182510751 )
مشارکت خارجی
- APIهای سازگار با PagedList منسوخشده به مصنوع rxjava3 اضافه شدند ( Id1ce2 ، b/182497591 )
صفحهبندی و نوشتن نسخه ۱.۰.۰
نسخه ۱.۰.۰-آلفا۲۰
۲۴ مه ۲۰۲۳
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 )
نسخه ۱.۰.۰-آلفا۱۹
۳ مه ۲۰۲۳
androidx.paging:paging-compose:1.0.0-alpha19 منتشر شد. نسخه 1.0.0-alpha19 شامل این کامیتها است.
پشتیبانی از همه طرحبندیهای تنبل
پیش از این، Paging Compose items سفارشی و افزونههای itemsIndexed را روی LazyListScope ارائه میداد، به این معنی که شما نمیتوانستید از Paging Compose با سایر طرحبندیهای تنبل مانند LazyVerticalGrid ، HorizontalPager یا سایر اجزای تنبل سفارشی ارائه شده توسط کتابخانههای Wear و TV استفاده کنید. رفع این عدم انعطافپذیری، بهروزرسانی اصلی این نسخه است.
برای پشتیبانی از طرحبندیهای تنبل بیشتر، ما نیاز داشتیم APIها را در لایهای متفاوت بسازیم - به جای ارائه یک API items سفارشی برای هر طرحبندی تنبل، Paging Compose اکنون متدهای افزونه سطح پایینتری را روی LazyPagingItems در itemKey و itemContentType ارائه میدهد. این APIها بر کمک به شما در پیادهسازی پارامترهای key و contentType در APIهای استاندارد items که از قبل برای LazyColumn ، LazyVerticalGrid و همچنین معادلهای آنها در APIهایی مانند 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)
}
}
برای مثالهای بیشتر از استفاده از این APIهای جدید، لطفاً به نمونههای ما مراجعه کنید.
اگرچه این تغییرات باعث میشود مثالهای LazyColumn و LazyRow چند خط طولانیتر شوند، اما احساس کردیم که سازگاری در تمام طرحبندیهای lazy عامل مهمی برای کسانی است که از Paging Compose در آینده استفاده میکنند. به همین دلیل، افزونههای موجود برای LazyListScope اکنون منسوخ شدهاند. ( I0c459 ، I92c8f ، b/276989796 )
تغییرات API
- برای سهولت مهاجرت به APIهای جدید، توابع افزونه
itemsوitemsIndexedدرLazyListScopeاکنون از پارامترcontentTypeپشتیبانی میکنند که منعکسکننده پشتیبانی در APIهای جدید است. ( Ib1918 ، b/255283378 )
بهروزرسانیهای وابستگی
- صفحهبندی Compose وابستگی خود را از Compose 1.0.5 به Compose 1.2.1 بهروزرسانی کرده است. ( Ib1918 ، b/255283378 )
نسخه ۱.۰.۰-آلفا۱۸
۸ فوریه ۲۰۲۳
androidx.paging:paging-compose:1.0.0-alpha18 بدون هیچ تغییری منتشر شده است. نسخه 1.0.0-alpha18 شامل این کامیتها است.
نسخه ۱.۰.۰-آلفا۱۷
۲۴ اکتبر ۲۰۲۲
androidx.paging:paging-compose:1.0.0-alpha17 منتشر شد. نسخه 1.0.0-alpha17 شامل این کامیتها است.
ویژگیهای جدید
- پشتیبانی از
CoroutineContextسفارشی هنگام فراخوانیcollectLazyPagingItemsاضافه شد. ( I7a574 ، b/243182795 ، b/233783862 )
نسخه ۱.۰.۰-آلفا۱۶
۱۰ آگوست ۲۰۲۲
androidx.paging:paging-compose:1.0.0-alpha16 منتشر شد. نسخه 1.0.0-alpha16 شامل این کامیتها است.
ویژگیهای جدید
- صفحهبندی اکنون از طریق کلاس
LazyPagingItemsلاگهایی را ارائه میدهد تا اطلاعات اشکالزدایی جمعآوریشده از PagingData را نمایش دهد. - گزارشها را میتوان از طریق دستور
adb shellبا نامadb shell setprop log.tag.Paging [DEBUG|VERBOSE]فعال کرد. ([b/235527159}(https://issuetracker.google.com/issues/235527159))
رفع اشکالات
- خطای از دست رفتن سازنده
PagingDataDifferهنگام استفاده ازpaging-compose:1.0.0-alpha15باpaging-common:3.1.1یا قدیمیتر برطرف شد. ( b/235256201 ، b/239868768 )
نسخه ۱.۰.۰-آلفا۱۵
۱ ژوئن ۲۰۲۲
androidx.paging:paging-compose:1.0.0-alpha15 منتشر شد. نسخه 1.0.0-alpha15 شامل این کامیتها است.
تغییرات API
- سازندههایی برای
PagingDataAdapterوAsyncPagingDataDifferاضافه شده است که به جایCoroutineDispatcherCoroutineContextمیپذیرند. ( Idc878 )
رفع اشکالات
-
LazyPagingItemsاکنونloadStateاولیه را طوری تنظیم میکند که دارای یک رفرشLoadState.Loadingباشد. ( I55043 ، b/224855902 )
نسخه ۱.۰.۰-آلفا۱۴
۱۳ اکتبر ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha14 منتشر شد. نسخه 1.0.0-alpha14 شامل این کامیتها است.
نسخه ۱.۰.۰-آلفا۱۳
۲۹ سپتامبر ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha13 منتشر شد. نسخه 1.0.0-alpha13 شامل این کامیتها است.
تغییرات API
- تابع
LazyPagingItems.snapshot()با ویژگیLazyPagingItems.itemSnapshotListجایگزین شد ( Ie2da8 ) -
LazyPagingItems.getAsState()منسوخ شده حذف شد ( Ie65e4 )
نسخه ۱.۰.۰-آلفا۱۲
۲۱ ژوئیه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha12 منتشر شد. نسخه 1.0.0-alpha12 شامل این کامیتها است.
تغییرات API
-
items(lazyPagingItems)وitemsIndexed(lazyPagingItems)که برای اتصال Paging باLazyColumn/Rowاستفاده میشدند، اکنون پارامتر key را میپذیرند که به شما امکان میدهد یک کلید پایدار برای نمایش آیتم مشخص کنید. میتوانید اطلاعات بیشتر در مورد کلیدها را اینجا بخوانید. ( I7986d ) - تابع
lazyPagingItems.getAsState(index)اکنون منسوخ شده است. به جای آنlazyPagingItems[index]استفاده کنید. ( I086cb , b/187339372 )
نسخه ۱.۰.۰-آلفا۱۱
۳۰ ژوئن ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha11 منتشر شد. نسخه 1.0.0-alpha11 شامل این کامیتها است.
نسخه ۱.۰.۰-آلفا۱۰
۲ ژوئن ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha10 منتشر شد. نسخه 1.0.0-alpha10 شامل این کامیتها است.
نسخه ۱.۰.۰-آلفا۰۹
۱۸ مه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha09 منتشر شد. نسخه 1.0.0-alpha09 شامل این کامیتها است.
رفع اشکالات
- itemCount و دریافتکنندهی آیتمِ LazyPagingItems اکنون قابل مشاهده هستند که امکان استفاده از آن را با LazyVerticalGrid نیز فراهم میکند ( Ie2446 ، b/171872064 ، b/168285687 ).
سازگاری با آهنگسازی
-
androidx.paging:paging-compose:1.0.0-alpha09فقط با Compose نسخه1.0.0-beta07و بالاتر سازگار است.
نسخه ۱.۰.۰-آلفا۰۸
۲۴ فوریه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha08 منتشر شد. نسخه 1.0.0-alpha08 شامل این کامیتها است.
برای ادغام با Compose 1.0.0-beta01 بهروزرسانی شد.
نسخه ۱.۰.۰-آلفا۰۷
۱۰ فوریه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha07 منتشر شد. نسخه 1.0.0-alpha07 شامل این کامیتها است.
برای ادغام با Compose alpha12 بهروزرسانی شد.
نسخه ۱.۰.۰-alpha06
۲۸ ژانویه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha06 منتشر شد. نسخه 1.0.0-alpha06 شامل این کامیتها است.
رفع اشکالات
برای وابستگی به Compose 1.0.0-alpha11 بهروزرسانی شد.
نسخه ۱.۰.۰-آلفا۰۵
۱۳ ژانویه ۲۰۲۱
androidx.paging:paging-compose:1.0.0-alpha05 منتشر شد. نسخه 1.0.0-alpha05 شامل این کامیتها است.
برای وابستگی به Compose 1.0.0-alpha10 بهروزرسانی شد.
نسخه ۱.۰.۰-آلفا۰۴
۱۶ دسامبر ۲۰۲۰
androidx.paging:paging-compose:1.0.0-alpha04 منتشر شد. نسخه 1.0.0-alpha04 شامل این کامیتها است.
رفع اشکالات
- ویژگیهای کمکی
CombinedLoadStates.refresh،CombinedLoadStates.prependوCombinedLoadStates.appendبهروزرسانی شدند تا فقط پس از اینکه هر دو حالت بارگذاری واسطه و منبع درNotLoadingقرار گرفتند، ازLoadingبهNotLoadingتغییر حالت دهند تا از اعمال بهروزرسانی از راه دور اطمینان حاصل شود. ( I65619 )
نسخه ۱.۰.۰-آلفا۰۳
۲ دسامبر ۲۰۲۰
androidx.paging:paging-compose:1.0.0-alpha03 منتشر شد. نسخه 1.0.0-alpha03 شامل این کامیتها است.
- برای مطابقت با Compose 1.0.0-alpha08 بهروزرسانی شد.
نسخه ۱.۰.۰-آلفا۰۲
۱۱ نوامبر ۲۰۲۰
androidx.paging:paging-compose:1.0.0-alpha02 منتشر شد. نسخه 1.0.0-alpha02 شامل این کامیتها است.
تغییرات API
- متدهای
.peek()،.snapshot()،.retry()و.refresh()بهLazyPagingItemها اضافه شدهاند که همان قابلیتهای موجود درAsyncPagingDataDiffer/PagingDataAdapter( Iddfe8 ، b/172041660 ) را ارائه میدهند.
نسخه ۱.۰.۰-آلفا۰۱
۲۸ اکتبر ۲۰۲۰
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")
}
}
}
نسخه ۳.۰.۱
نسخه ۳.۰.۱
۲۱ ژوئیه ۲۰۲۱
androidx.paging:paging-*:3.0.1 منتشر شد. نسخه ۳.۰.۱ شامل این کامیتها است.
رفع اشکالات
- دسترسی به
PagedList.dataSourceاز مقدار اولیه تولید شده توسطLivePagedListیاRxPagedListدیگر به اشتباه خطای IllegalStateException ( I96707 ) را صادر نمیکند.
نسخه ۳.۰.۰
نسخه ۳.۰.۰
۵ مه ۲۰۲۱
androidx.paging:paging-*:3.0.0 منتشر شد. نسخه ۳.۰.۰ شامل این کامیتها است.
ویژگیهای اصلی نسخه ۳.۰.۰
بخش عمدهای از API موجود از Paging 2.xx به نفع APIهای جدید Paging 3 منسوخ شده است تا بهبودهای زیر را به همراه داشته باشد:
- پشتیبانی درجه یک از کوروتینهای کاتلین و Flow
- پشتیبانی از لغو
- سیگنالهای وضعیت بار و خطای داخلی
- قابلیت تلاش مجدد + بهروزرسانی
- هر سه زیرکلاس DataSource در یک کلاس PagingSource یکپارچه ترکیب شدهاند.
- تبدیلهای سفارشی صفحه شامل یک تبدیل داخلی برای اضافه کردن جداکنندهها
- بارگذاری سرصفحهها و پاصفحههای وضعیت
نسخه ۳.۰.۰-rc01
۲۱ آوریل ۲۰۲۱
androidx.paging:paging-*:3.0.0-rc01 منتشر شد. نسخه 3.0.0-rc01 شامل این کامیتها است.
رفع اشکالات
- مشکلی که باعث میشد Paging گاهی اوقات رویدادهای no-op different را به RecyclerView ارسال کند، برطرف شد. این امر میتوانست باعث شود برخی از listenerها زودتر فعال شوند. ( Ic507f ، b/182510751 )
نسخه ۳.۰.۰-بتا۰۳
۲۴ مارس ۲۰۲۱
androidx.paging:paging-*:3.0.0-beta03 منتشر شد. نسخه 3.0.0-beta03 شامل این کامیتها است.
رفع اشکالات
- ما نحوهی مدیریت placeholderها هنگام بارگذاری مجدد لیست را اصلاح کردهایم تا از پرشهای غیرمنتظره در RecyclerView جلوگیری شود. برای جزئیات بیشتر به NullPaddedDiffing.md مراجعه کنید. ( If1490 , b/170027529 , b/177338149 )
- سازندگان مختلف PagedList (مسیر سازگاری قدیمی) دیگر هنگام فراخوانی
.build()به طور همزمان و نادرستDataSource.Factory.create()را در نخ اصلی فراخوانی نمیکنند. ( b/182798948 )
نسخه ۳.۰.۰-بتا۰۲
۱۰ مارس ۲۰۲۱
androidx.paging:paging-*:3.0.0-beta02 منتشر شد. نسخه 3.0.0-beta02 شامل این کامیتها است.
تغییرات API
- افزونههای Rx3 اکنون به درستی الزام Opt-In
@ExperimentalCoroutinesApiرا منتشر میکنند. پیش از این، آنها در متد@getعلامتگذاری میشدند که به دلایل زیر توسط کامپایلر کاتلین نادیده گرفته میشود: https://youtrack.jetbrains.com/issue/KT-45227 ( I5733c )
رفع اشکالات
- اعمال محدودیتهایی بر استفاده عمومی از APIهای آزمایشی ( I6aa29 ، b/174531520 )
- اشکالی که باعث میشد
PagingStateهنگام فراخوانی بهروزرسانی از راه دور، همیشهnullباشد، برطرف شد. - اشکالی که باعث میشد صفحات خالی برگردانده شده توسط PagingSource مانع از واکشی مجدد Paging برای برآورده کردن
prefetchDistanceشوند و باعث "گیر کردن" Paging شوند، برطرف شد.
نسخه ۳.۰.۰-بتا۰۱
۱۰ فوریه ۲۰۲۱
androidx.paging:paging-*:3.0.0-beta01 منتشر شد. نسخه 3.0.0-beta01 شامل این کامیتها است.
تغییرات API
- بستههای Rx2 و Rx3 اکنون حاشیهنویسی آزمایشی که به آن وابسته است را نمایش میدهند. اگر از بستههای Rx compat در paging-rxjava2 یا paging-rxjava3 استفاده میکنید، اکنون باید کاربردها را با
@OptIn(ExperimentalCoroutinesApi::class)( Ib1f9d ) حاشیهنویسی کنید.
رفع اشکالات
- رفع خطای
IndexOutOfBoundsException: Inconsistency detectedگاهی اوقات هنگام استفاده از APIهایDataSourceنسخه ۲ از طریق مسیرهای سازگاری، ناسازگاری شناسایی میشد. - فراخوانی
isInvalidهنگام مقداردهی اولیهDataSourceهنگام استفاده از مسیرهای سازگاری، اکنون به جای نخ اصلی، به درستی در fetchDispatcher اجرا میشود. این مورد، خطایIllegalStateExceptionناشی از دسترسی به پایگاه داده در نخ اصلی هنگام استفاده از پیادهسازیPagingSourceدر Room را برطرف میکند.
نسخه ۳.۰.۰-آلفا۱۳
۲۷ ژانویه ۲۰۲۱
androidx.paging:paging-*:3.0.0-alpha13 منتشر شد. نسخه 3.0.0-alpha13 شامل این کامیتها است.
تغییرات API
- پیادهسازی
PagingSource.getRefreshKeyدیگر اختیاری نیست، اکنون یک تابع انتزاعی بدون پیادهسازی پیشفرض است. کاربران در حال مهاجرت میتوانند یا پیادهسازی پیشفرض را برگردانند که به سادگیnullبرمیگرداند، اماgetRefreshKey()باید یک پیادهسازی واقعی داشته باشد که یک کلید را بر اساس موقعیت اسکرول فعلی کاربر برمیگرداند که به Paging اجازه میدهد در صورت امکان، از طریقPagingState.anchorPosition، بارگذاری را در اطراف viewport ادامه دهد. ( I4339a ) -
InvalidatingPagingSourceFactoryاکنون یک کلاس نهایی است ( Ia3b0a ) - امکان پیکربندی رفتار جداکننده ترمینال (سربرگ / پاورقی) با یک پارامتر SeparatorType اختیاری اضافی. دو گزینه عبارتند از:
-
FULLY_COMPLETE- رفتار موجود؛ قبل از اضافه کردن جداکنندههای ترمینال، منتظر بمانید تا PagingSource و RemoteMediator علامت endOfPaginationReached را بزنند. اگر RemoteMediator استفاده نشود، remote loadState نادیده گرفته میشود. این در درجه اول زمانی مفید است که بخواهید جداکنندههای بخش را فقط زمانی نشان دهید که بخش به طور کامل بارگذاری شده باشد، از جمله واکشی از منبع راه دور، مانند شبکه. -
SOURCE_COMPLETE- فقط منتظر بمانید تا PagingSource حتی اگر از RemoteMediator استفاده شده باشد، endOfPaginationReached را علامتگذاری کند. این امر به هدرها و پاورقیها اجازه میدهد تا همزمان با بارگذاری اولیه نمایش داده شوند، که مانع از نیاز کاربران به اسکرول کردن برای دیدن جداکنندههای ترمینال میشود. ( Ibe993 , b/174700218 )
-
رفع اشکالات
- مشکل نادر نشت حافظه که زمانی رخ میداد که یک PagingSource قبل از اینکه PageFetcher حتی بتواند شروع به بارگذاری از آن کند، نامعتبر میشد، برطرف شد. ( I9606b ، b/174625633 )
نسخه ۳.۰.۰-آلفا۱۲
۱۳ ژانویه ۲۰۲۱
androidx.paging:paging-*:3.0.0-alpha12 منتشر شد. نسخه 3.0.0-alpha12 شامل این کامیتها است.
تغییرات API
- کلاس InvalidatingPagingSourceFactory دیگر یک کلاس انتزاعی نیست، زیرا هرگز هیچ متد انتزاعی نداشته است. ( I4a8c4 )
- یک overload از .cachedIn() اضافه شده است که ViewModel را به جای Lifecycle یا CoroutineScope برای کاربران جاوا میپذیرد. ( I97d81 , b/175332619 )
- به فراخوانیکنندگان جاوا اجازه دهید تا با پذیرش یک Executor در آرگومانهای عملگر تبدیل، از عملیات تبدیل PagingData به صورت غیرهمزمان استفاده کنند. پسوند -Sync برای همه عملگرهای تبدیل -Sync اکنون حذف شده است و کاربران Kotlin Coroutine باید با فراخوانی تابع افزونه که به جای آن یک بلوک معلق را میپذیرد، ابهامزدایی کنند. همه عملگرهای تبدیل PagingData به افزونههای تحت کلاس استاتیک PagingDataTransforms منتقل شدهاند. کاربران جاوا باید آنها را از طریق کمککنندههای استاتیک فراخوانی کنند، مثلاً
PagingDataTransforms.map(pagingData, transform)برای کاربران Kotlin، سینتکس یکسان است اما باید تابع را وارد کنید. ( If6885 , b/172895919 )
رفع اشکالات
- اشکالی که باعث میشد در صورت رسیدن به انتهای صفحهبندی،
RemoteMediator.load()در طولadapter.refresh()فراخوانی نشود، برطرف شد.
نسخه ۳.۰.۰-آلفا۱۱
۱۶ دسامبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha11 منتشر شد. نسخه 3.0.0-alpha11 شامل این کامیتها است.
ویژگیهای جدید
- پشتیبانی از وضعیت ذخیرهشده برای موارد استفاده اساسی زیر اضافه شد (پشتیبانی کامل، به خصوص در مورد کد منبع لایهای هنوز در دست اقدام است):
- جریان داده ذخیره میشود و برنامه از بین نمیرود (مثلاً جریان داده در یک مدل نمایش ذخیره میشود و فعالیت در حین پردازش دوباره ایجاد میشود)
- منبع صفحهبندی شمرده میشود، متغیرهایی فعال میشوند و طرحبندی به صورت پلکانی نیست.
تغییرات API
-
PagingSource.getRefreshKey()اکنون یک API پایدار است ( I22f6f ، b/173530980 ) -
PagingSource.invalidateدیگر یک تابع باز نیست. اگر نیاز دارید که هنگام وقوع نامعتبر شدن مطلع شوید، به جای بازنویسی invalidate، فراخوانی متد registerInvalidatedCallback را در نظر بگیرید. ( I628d9 , b/173029013 , b/137971356 ) - Pager اکنون در کنار سازندههای معمولی خود، یک سازنده آزمایشی واحد دارد، به جای اینکه APIهای آزمایشی را از طریق حاشیهنویسی opt-in به API عمومی غیرآزمایشی نشت دهد. ( I9dc61 , b/174531520 )
- ویژگیهای کمکی
CombinedLoadStates.refresh،CombinedLoadStates.prependوCombinedLoadStates.appendبهروزرسانی شدند تا فقط پس از اینکه هر دو حالت بارگذاری واسطه و منبع درNotLoadingقرار گرفتند، ازLoadingبهNotLoadingتغییر حالت دهند تا از اعمال بهروزرسانی از راه دور اطمینان حاصل شود. ( I65619 ) LoadParams.pageSize حذف شده است (قبلاً منسوخ شده بود). توصیه میشود از
LoadParams.loadSizeدر PagingSource خود استفاده کنید.LoadParams.loadSizeهمیشه برابر باPagingConfig.pageSizeاست، به جز برای فراخوانی اولیه بارگذاری که در آن برابر باPagingConfig.initialLoadSizeاست.اگر در حال آزمایش Paging2 DataSource خود بدون استفاده از Pager یا PagedList هستید، در صورتی که
initialLoadSizeنیز تنظیم میکنید، ممکن استpageSizePagingConfig.pageSizeمطابقت نداشته باشد. اگر این موضوع برای آزمایشهای شما مهم است، سعی کنید از Pager/PagedList استفاده کنید که به طور داخلی PageSize صحیح را برای متدهای بارگذاری DataSource شما تنظیم میکند. ( I98ac7 , b/149157296 )
رفع اشکالات
- مشکل از کار افتادن برنامه به دلیل IllegalStateException هنگام استفاده از جداکنندهها با تنظیم PagingConfig.maxSize برطرف شد. ( I0ed33 ، b/174787528 )
- اشکالی که باعث میشد وضعیت بارگذاری برای PREPEND / APPEND بلافاصله پس از بارگذاری اولیه در صورت تنظیم RemoteMediator ( I8cf5a ) به
NotLoading(endOfPaginationReached = true)بهروزرسانی نشود، برطرف شد. - اشکالی که باعث میشد APIهای سمت ارائهدهنده مانند .snapshot()، .peek() و غیره، لیست قبلی (منسوخشده) را در بهروزرسانیهای ListUpdateCallback برمیگرداندند، برطرف شد.
- اشکالی که باعث میشد عملگرهای Separators هنگام استفاده با RemoteMediator سرصفحه یا پاصفحه اضافه نکنند، برطرف شد.
- اشکالی که باعث میشد بهروزرسانیهای LoadState به NotLoading برای RemoteMediator در حالت Loading گیر کنند، برطرف شد.
- اشکالی که باعث میشد API سازگاری Paging2.0،
.asPagingSourceFactory()، باعث شودDataSourceپشتیبان روی CoroutineDispatcher نادرست مقداردهی اولیه شود، برطرف شد. این مشکل، خرابی و موارد احتمالی ANR را برطرف میکند، به خصوص هنگام استفاده از پیادهسازی فعلی Room از PagingSource که از این مسیر سازگاری استفاده میکند.
نسخه ۳.۰.۰-آلفا۱۰
۲ دسامبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha10 منتشر شد. نسخه 3.0.0-alpha10 شامل این کامیتها است.
تغییرات API
APIهای منسوخشدهی
dataRefreshFlowوdataRefreshListenerحذف شدهاند، زیرا با بهروزرسانیهای loadStateFlow / Listener زائد میشوند. برای کسانی که مهاجرت میکنند، معادل loadStateFlow به صورت زیر است:loadStateFlow.distinctUntilChangedBy { it.refresh } .filter { it.refresh is NotLoading }( Ib5570 ، b/173530908 )
رفع اشکالات
- endOfPaginationReached برای RemoteMediator
REFRESHاکنون به درستی به روزرسانی های LoadState را منتشر می کند و از فعال شدنAPPENDوPREPENDاز راه دور جلوگیری می کند. ( I94a3f ، b/155290248 ) - ارائه یک لیست خالی، چه به دلیل صفحه اولیه خالی و چه به دلیل فیلترینگ سنگین، دیگر مانع از شروع بارگذاری
PREPENDیاAPPENDتوسط Paging نمیشود. ( I3e702 ، b/168169730 ) - مشکلی که باعث میشد
getRefreshKeyدر نسلهای بعدی PagingSource، زمانی که نامعتبرسازیها به سرعت رخ میدهند، فراخوانی نشود، برطرف شد. ( I45460 ، b/170027530 )
مشارکت خارجی
- یک کلاس انتزاعی جدید به نام InvalidatingPagingSourceFactory با یک API از
.invalidate()اضافه شده است که invalidate را به تمام PagingSource هایی که منتشر میکند، ارسال میکند. با تشکر از @claraf3 ! ( Ie71fc , b/160716447 )
مشکلات شناخته شده
- ممکن است سربرگها و پابرگهای تبدیل .insertSeparators() هنگام استفاده از RemoteMediator b/172254056 بلافاصله نمایش داده نشوند.
- استفاده از RemoteMediator میتواند باعث شود که اگر اعتبارسنجی و
PagingSource.load(LoadParams.Refresh(...))قبل از اینکهRemoteMediator.load()مقدار b/173717820 را برگرداند، کامل شود،LoadStateریموت گیر کند.
نسخه ۳.۰.۰-alpha09
۱۱ نوامبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha09 منتشر شد. نسخه 3.0.0-alpha09 شامل این کامیتها است.
تغییرات API
- متدهای dataRefreshFlow/Listener را با استفاده از عبارت replaceWith به طور کامل منسوخ کنید. ( I6e2dd )
رفع اشکالات
- رفع مشکل خطای
IllegalArgumentExceptionهنگام استفاده از جداکنندهها با RemoteMediator و اجرای یک invalidate در حالی که بارگذاری از راه دور که endOfPagination را برمیگرداند هنوز در حال اجرا است ( I3a260 )
نسخه ۳.۰.۰-آلفا۰۸
۲۸ اکتبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha08 منتشر شد. نسخه 3.0.0-alpha08 شامل این کامیتها است.
تغییرات API
- انواع Kotlin/Java از
DataSource.InvalidatedCallbackبا فعال کردن تبدیلهای SAM در Kotlin از طریق رابط تابعی (موجود در Kotlin 1.4) ترکیب شدهاند. این همچنین اشکالی را برطرف میکند که در آن نوع Kotlin از callbackهای invalidate پس از تبدیل توسط.mapیا.mapByPageفراخوانی نمیشد. ( I1f244 ، b/165313046 )
رفع اشکالات
- تعامل Paging با ViewPager به طور قابل توجهی بهبود یافته است. به طور خاص، Paging دیگر فراخوانی
RemoteMediator#loadرا به دلیل نامعتبر شدن صفحه لغو نمیکند. همچنین اگر REFRESH مورد نیاز باشد ، دیگر درخواست بارگذاری append/prepend را تا زمانی که درخواست REFRESH با موفقیت تکمیل شود، ارسال نمیکند. ( I6390b , b/162252536 ) - بررسی lint در API برای MissingGetterMatchingBuilder برای androidx فعال است ( I4bbea ، b/138602561 )
- اشکالی که باعث میشد کمککنندههای
.withLoadState*ConcatAdapterبه دلیل اطلاعرسانی به RecyclerView از نخ پسزمینه از کار بیفتند، برطرف شد ( I18bb5 ، b/170988309 ) - اشکالی که باعث میشد بارگذاری یک صفحه بسیار کوچک و غیر خالی گاهی اوقات مانع از بارگذاری صحیح پیشواکشی شود، برطرف شد. Iffda3 b/169259468
نسخه ۳.۰.۰-alpha07
۱ اکتبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha07 منتشر شد. نسخه 3.0.0-alpha07 شامل این کامیتها است.
تغییرات API
- عملگرهای مبتنی بر Guava در Async PagingData اکنون یک Executor را به عنوان پارامتر میپذیرند تا زمینه اجرا را کنترل کنند. ( Id4372 )
رفع اشکالات
- رفع خطای IndexOutOfBounds که به دلیل شرایط رقابتی در RemoteMediator رخ میداد. ( I00b7f ، b/165821814 )
- مشکل رقابتی در تبدیل DataSource -> PagingSource که میتوانست باعث شود PagingSource حاصل، سیگنالهای نامعتبرسازی از DataSource را نادیده بگیرد، برطرف شد.
- مشکلی در منطق واکشی صفحه که گاهی اوقات باعث میشد تا زمانی که PagingDataAdapter.refresh() فراخوانی نشود، نتواند نسلهای جدید PagingSource را دریافت کند، برطرف شد.
- مشکلی که باعث میشد هنگام استفاده از DataSource تبدیلشده به PagingSource (مانند نمونه تولیدشده توسط Room) همراه با RemoteMediator، موقعیت اسکرول گاهی اوقات از بین برود، برطرف شد.
مشارکت خارجی
- با تشکر از @simonschiller برای اضافه کردن عملگرهای تبدیل ناهمزمان مبتنی بر RxJava2، RxJava3 و Guava برای PagingData!
نسخه ۳.۰.۰-alpha06
۲ سپتامبر ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha06 منتشر شد. نسخه 3.0.0-alpha06 شامل این کامیتها است.
تغییرات API
-
UnsupportedOperationExceptionبا پیامهای واضحتر در مورد عدم پشتیبانی از شناسههای پایدار، اکنون هر زمان کهPagingDataAdapter.setHasStableIdsفراخوانی میشود، نمایش داده میشود. ( Ib3890 ، b/158801427 )
رفع اشکالات
- insertSeparators دیگر صفحات خالی را فیلتر نمیکند و اجازه میدهد فاصلهی پیشواکشی توسط ارائهدهنده رعایت شود، حتی در مواردی که صفحات خالی زیادی درج شده باشد. ( I9cff6 , b/162538908 )
نسخه ۳.۰.۰-آلفا۰۵
۱۹ آگوست ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha05 منتشر شد. نسخه 3.0.0-alpha05 شامل این کامیتها است.
رفع اشکالات
- صفحهبندی اکنون صفحات را به درستی پیشواکشی میکند، حتی زمانی که دادههای ارائه شده به شدت فیلتر شدهاند
- برگرداندن
LoadResult.Errorبه یک بارگذاری مجدد، دیگر باعث نمیشود که دسترسی به آیتمها به اشتباه باعث شروع مجدد تلاش مجدد شود.
مشارکت خارجی
- با تشکر از کلارا اف برای کمک به مرتب کردن برخی از تستها! ( 549612 )
نسخه ۳.۰.۰-آلفا۰۴
۵ آگوست ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha04 منتشر شد. نسخه 3.0.0-alpha04 شامل این کامیتها است.
تغییرات API
- API مربوط به
peek()بهAsyncPagingDataDifferوPagingDataAdapterاضافه شد تا دسترسی به دادههای ارائه شده بدون بارگذاری صفحه فعال (trigger) امکانپذیر باشد. ( I38898 ، b/159104197 ) - یک API مربوط به
snapshot()بهPagingDataAdapterوAsyncPagingDataDifferاضافه شد تا امکان بازیابی موارد ارائه شده بدون فعال شدن فراخوانی صفحه فراهم شود. ( I566b6 , b/159104197 ) - یک سازنده
PagingData.from(List<T>)اضافه شده است تا امکان نمایش لیستهای ایستا را فراهم کند، که میتواند با جریان کلی PagingData ترکیب شود تا لیستهای ایستا را در حالتهای خاص، مثلاً قبل از اتمام REFRESH اولیه یا صرفاً برای آزمایش تبدیلها، نشان دهد. ( Id134d ) - APIهای dataRefresh Flow / Listener را منسوخ کنید، زیرا قرار بود وضعیت آیتمهای ارائه شده را در REFRESH نمایش دهند، اما با بهبود زمانبندی فراخوانی loadState Flow / Listener و ویژگی itemCount، دیگر نیازی به آن نیست ( Ia19f3 )
- بستههای سازگاری RxJava3 برای
PagingSourceوRemoteMediatorاضافه شد ( I49ef3 ، b/161480176 )
رفع اشکالات
-
PositionalDataSourceاز طریق کمککنندهtoPagingSourceFactoryبهPagingSourceتبدیل شده است، از جملهPagingSourceتولید شده توسط Room که اکنون به درستی خود را برای پشتیبانی از پرش علامتگذاری میکنند. ( I3e84c ، b/162161201 ) - اشکالی که باعث میشد استفاده از نوع همزمان submitData گاهی منجر به ایجاد یک مسابقه و در نتیجه خطای
ClosedSendChannelExceptionشود، برطرف شد ( I4d702 ، b/160192222 ).
مشارکت خارجی
- با تشکر از زک سویرز برای اضافه کردن بستههای سازگاری RxJava3 از طرف Slack! ( I49ef3 , b/161480176 )
نسخه ۳.۰.۰-alpha03
۲۲ ژوئیه ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha03 منتشر شد. نسخه 3.0.0-alpha03 شامل این کامیتها است.
تغییرات API
- سازندهی PagingState اکنون عمومی است، که باید آزمایش پیادهسازیهای getRefreshKey() را آسانتر کند ( I8bf15 )
- انواع تابع نگاشت کاتلین DataSource را از جاوا مخفی کرد تا ابهام بین انواع اصلی و کاتلین را برطرف کند. ( If7b23 ، b/161150011 )
- APIهای افزونهای که به عنوان امکاناتی برای کاربران کاتلین در نظر گرفته شدهاند، با @JvmSynthetic ( I56ae5 ) علامتگذاری شدهاند.
- اضافه بارهایی برای سازنده LoadResult.Page اضافه شده است که مقادیر پیشفرض itemsBefore و itemsAfter را روی COUNT_UNDEFINED ( I47849 ) قرار میدهد.
- عملگرهای PagingData موجود، متدهای تعلیق را پذیرفتند و عملگرهای جدید mapSync، flatMapSync و filterSync را برای کاربران جاوا معرفی کرد. متدهای تبدیل موجود به توابع افزونه منتقل شدهاند، بنابراین کاربران کاتلین اکنون باید آنها را وارد کنند. ( I34239 ، b/159983232 )
رفع اشکالات
- Room (و PositionalDataSource) PagingSources اکنون یک جداکنندهی ابتدایی را به عنوان بخشی از صفحه اول نمایش میدهد، بنابراین کاربر نیازی به اسکرول کردن برای نمایش آن ندارد. ( I6f747 , b/160257628 )
- دسترسی به آیتمها در placeholderها اکنون به درستی بارگذاری PagingSource را آغاز میکند تا زمانی که صفحهای برگردانده شود که پس از تبدیل توسط PagingData.filter() ( I95625 ، b/158763195 ) شاخص درخواستی را برآورده کند.
- رفع اشکالی که گاهی اوقات پیمایش پس از بازگشت خطا توسط PagingSource میتوانست مانع از تلاش مجدد PagingDataAdapter.retry() شود. ( I1084f ، b/160194384 )
- مشکلی را برطرف میکند که در آن دسترسی به آیتمها پس از حذف یک صفحه، ممکن است صفحات را بارگیری نکند، اگرچه دسترسی به آیتم در محدوده prefetchDistance ( Ie95ae ، b/160038730 ) بوده است.
- تنظیم PagingConfig.maxSize دیگر پس از رویداد رها کردن، متغیرهایی را فعال نمیکند ( I2be29 ، b/159667766 )
نسخه ۳.۰.۰-آلفا۰۲
۲۴ ژوئن ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha02 منتشر شد. نسخه 3.0.0-alpha02 شامل این کامیتها است.
تغییرات API
- اضافه بارهای اضافی برای سازنده
PagingConfigبا مقادیر پیشفرض مشترک ( I39c50 ، b/158576040 ) اضافه شد. - اضافه بارهای اضافی برای سازندههای
PagingDataAdapterوAsyncPagingDataDifferبا مقادیر پیشفرض مشترک ( Ie91f5 ) اضافه شد. - APIهای آداپتور،
dataRefreshFlowوdataRefreshListenerاکنون یک مقدار بولی برای نشان دادن خالی بودنPagingDataارسال میکنند ( I6e37e ، b/159054196 ) - APIهای RxJava و Guava برای RemoteMediator اضافه شدند - RxRemoteMediator و ListenableFutureRemoteMediator
- برای دسترسی به آیتمهای رایج، تابعهای کمکی مانند
isEmpty()وfirstItemOrNull()به PagingState اضافه شدند ( I3b5b6 ، b/158892717 ).
رفع اشکالات
- پیجر اکنون استفاده مجدد از PagingSource را در کارخانه بررسی میکند تا از استفاده مجدد تصادفی از PagingSources نامعتبر که خطای نامشخصی ( I99809 ، b/158486430 ) میداد، جلوگیری کند.
- خطاهای RemoteMediator REFRESH دیگر مانع از بارگیری PagingSource نمیشوند ( I38b1b ، b/158892717 )
- نسخه غیر تعلیقشدهی
submitDataدیگر به دلیل جمعآوری همزمان روی چندینPagingDataهنگام فراخوانی پس از نسخه تعلیقشدهیsubmitDataباعث خرابی نمیشود. ( I26358 ، b/158048877 ) - خطای «نمیتوان دو بار از پیجر اطلاعات را جمعآوری کرد» که ممکن بود پس از تغییر پیکربندی ( I58bcc ، b/158784811 ) رخ دهد، برطرف شد.
نسخه ۳.۰.۰-آلفا۰۱
۱۰ ژوئن ۲۰۲۰
androidx.paging:paging-*:3.0.0-alpha01 منتشر شد. نسخه 3.0.0-alpha01 شامل این کامیتها است.
کتابخانه صفحهبندی به نسخه ۳.۰ بهروزرسانی شده است تا چندین ویژگی جدید و مهم را فعال کند.
ویژگیهای جدید نسخه ۳.۰
- پشتیبانی درجه یک از کوروتینهای کاتلین و Flow.
- پشتیبانی از بارگذاری ناهمگام با توابع تعلیق کوروتین، RxJava Single یا Guava ListenableFuture primitives .
- سیگنالهای وضعیت بارگذاری و خطای داخلی برای طراحی رابط کاربری واکنشگرا، شامل قابلیت تلاش مجدد و بهروزرسانی.
- بهبودهایی در لایه مخزن
- رابط کاربری سادهشدهی منبع داده
- صفحهبندی سادهشده شبکه + پایگاه داده
- پشتیبانی لغو
- بهبودهایی در لایه ارائه
مشکلات شناخته شده
- فایلهای جاوای صفحهبندی ۳ هنوز در دسترس نیستند. در این فاصله، لطفاً از راهنماهای لینکشده در بالا یا مستندات کاتلین استفاده کنید. ( b/158614050 )
نسخه ۲.۱.۲
نسخه ۲.۱.۲
۱۸ مارس ۲۰۲۰
androidx.paging:paging:2.1.2 منتشر شد. نسخه ۲.۱.۲ شامل این کامیتها در برابر ۲.۱.۰ است .
رفع اشکالات
- رفع خطای
IndexOutOfBoundsExceptionدر موارد نادر هنگام تبدیل یک موقعیت در حین نامعتبرسازی.
مشکل انتشار
نسخه
2.1.1از یک شاخه با پیکربندی نادرست به صورت نادرست منتشر شد و APIها و عملکردهایی را که تا حدی پیادهسازی شده بودند، در معرض خطر قرار داد که قرار است در نسخههای آینده منتشر شوند.صفحهبندی
2.1.2شامل اصلاحیه بارگذاری مرکزی است که در ابتدا در نسخه ۲.۱.۱ منتشر شد، اما این بار به درستی از نسخه ۲.۱.۰ انتخاب شده است. اگر در حال حاضر از نسخه ۲.۱.۱ استفاده میکنید، اکیداً توصیه میشود که به این نسخه ارتقا دهید.
نسخه ۲.۱.۱
نسخه ۲.۱.۱
۱۸ دسامبر ۲۰۱۹
androidx.paging:paging-*:2.1.1 منتشر شد. نسخه 2.1.1 شامل این کامیتها است .
رفع اشکالات
- بارگذاریهای اولیهی پیوسته از PositionalDataSources اکنون حول آخرین دسترسی متمرکز میشوند، زمانی که placeholderها غیرفعال هستند.
نسخه ۲.۱.۰
نسخه ۲.۱.۰
۲۵ ژانویه ۲۰۱۹
صفحهبندی 2.1.0 بدون هیچ تغییری نسبت به 2.1.0-rc01 منتشر شد.
نسخه ۲.۱.۰-rc01
۶ دسامبر ۲۰۱۸
Paging 2.1.0-rc01 بدون هیچ تغییری نسبت به 2.1.0-beta01 منتشر شد.
نسخه ۲.۱.۰-بتا۰۱
۱ نوامبر ۲۰۱۸
Paging 2.1.0-beta01 بدون هیچ تغییری نسبت به 2.1.0-alpha01 منتشر شد.
نسخه ۲.۱.۰-آلفا۰۱
۱۲ اکتبر ۲۰۱۸
صفحهبندی 2.1.0-alpha01 دو قابلیت جدید و مهم دارد - حذف صفحه و کتابخانههای افزونه KTX برای هر مصنوع - و همچنین چندین تغییر و رفع اشکال دیگر در API.
تغییرات API
- برای محدود کردن تعداد آیتمهای بارگذاری شده در حافظه،
PagedList.Config.Builder.setMaxSize()اضافه شد. - Added
androidx.paging.Config()as a Kotlin alternative forPagedList.Config.Builder - Added
androidx.paging.PagedList()as a Kotlin alternative forPagedList.Builder - Added
DataSourceFactory.toLiveData()as a Kotlin alternative forLivePagedListBuilder - Added
DataSourceFactory.toObservable()andtoFlowable()as Kotlin alternatives forRxPagedListBuilder - Added
AsyncPagedListDiffer.addPagedListListener()for listening to when PagedList is swapped. b/111698609 - Added
PagedListAdapter.onCurrentListChanged()variant that passes old and new list, deprecated previous variant. - Added
PagedListAdapter/AsyncPagedListDiffer.submitList()variants which take an additional callback that triggers if/when the pagedlist is displayed, after diffing. This allows you to synchronize a PagedList swap with other UI updates. b/73781068 -
PagedList.getLoadedCount()added to let you know how many items are in memory. Note that the return value is always equal to.size()if placeholders are disabled.
رفع اشکالات
- Fixed a race condition when diffing if lists are reused b/111591017
-
PagedList.loadAround()now throwsIndexOutOfBoundsExceptionwhen index is invalid. Previously it could crash with an unclear other exception. - Fixed a case where an extremely small initial load size together with unchanged data would result in no further loading b/113122599
نسخه ۲.۰.۰
نسخه ۲.۰.۰
۱ اکتبر ۲۰۱۸
Paging 2.0.0 is released with a single bugfix.
رفع اشکالات
- Fixed a crash that could occur with very fast scrolling using
PositionalDataSourceand placeholders b/114635383 .
Version 2.0.0-beta01
۲ ژوئیه ۲۰۱۸
رفع اشکالات
- Fixed content disappearing in some prepend cases (placeholders disabled, PositionalDataSource) b/80149146
- (Already released in
1.0.1) Fixed crashes wherePagedListAdapterandAsyncPagedListDifferwould fail to signal move events. b/110711937
Pre-AndroidX Dependencies
For the pre-AndroidX versions of Paging that follow, include these dependencies:
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 is released with a single bugfix in runtime . We highly recommend using 1.0.1 for stability. Paging RxJava2 1.0.1 is also released, and is identical to 1.0.0-rc1 .
رفع اشکالات
- Fixed crashes where
PagedListAdapterandAsyncPagedListDifferwould fail to signal move events. b/110711937
RxJava2 Version 1.0.0
RxJava2 Version 1.0.0-rc1
۱۶ مه ۲۰۱۸
Paging RxJava2 1.0.0-rc1 is moving to release candidate with no changes from the initial alpha.
نسخه ۱.۰.۰
Version 1.0.0-rc1
April 19, 2018 Paging Release Candidate
We do not have any more known issues or new features scheduled for the Paging 1.0.0 release. Please upgrade your projects to use 1.0.0-rc1 and help us battle test it so that we can ship a rock solid 1.0.0 .
There are no changes in this release, it is the same as 1.0.0-beta1 .
Version 1.0.0-beta1
۵ آوریل ۲۰۱۸
Paging will be in beta for a short time before progressing to release candidate. We are not planning further API changes for Paging 1.0 , and the bar for any API changes is very high.
Alpha RxJava2 support for Paging is released as a separate optional module ( android.arch.paging:rxjava2:1.0.0-alpha1 ) and will temporarily be versioned separately until it stabilizes.
This new library provides an RxJava2 alternative to LivePagedListBuilder , capable of constructing Observable s and Flowable s, taking Scheduler s instead of Executor s:
کاتلین
val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable()
جاوا
Observable<PagedList<Item>> pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50) .setFetchScheduler(myNetworkScheduler) .buildObservable();
ویژگیهای جدید
-
RxPagedListBuilderis added via the newandroid.arch.paging:rxjava2artifact.
تغییرات API
API changes to clarify the role of executors in builders:
Renamed
setBackgroundThreadExecutor()tosetFetchExecutor()(inPagedList.BuilderandLivePagedListBuilder)Renamed
setMainThreadExecutor()tosetNotifyExecutor()(inPagedList.Builder).
Fixed
PagedList.mCallbacksmember to be private.
رفع اشکالات
LivePagedListBuildertriggers initialPagedListload on the specified executor, instead of the Arch Components IO thread pool.Fixed invalidate behavior in internal
DataSourcewrappers (used to implementDataSource.map, as well as placeholder-disabledPositionalDataSourceloading) b/77237534
Version 1.0.0-alpha7
۲۱ مارس ۲۰۱۸
Paging 1.0.0-alpha7 is released alongside Lifecycles 1.1.1 . As Paging alpha7 depends on the move of the Function class mentioned above, you will need to update your lifecycle:runtime dependency to android.arch.lifecycle:runtime:1.1.1 .
Paging alpha7 is planned to be the final release before Paging hits beta.
تغییرات API
-
DataSource.LoadParamsobjects now have a public constructor andDataSource.LoadCallbackobjects are now abstract. This enables wrapping aDataSourceor directly testing aDataSourcewith a mock callback. b/72600421 - Mappers for DataSource and DataSource.Factory
-
map(Function<IN,OUT>)allows you to transform, wrap, or decorate results loaded by aDataSource. -
mapByPage(<List<IN>,List<OUT>>)enables the same for batch processing (eg if items loaded from SQL need to additionally query a separate database, that can be done as a batch.)
-
-
PagedList#getDataSource()is added as a convenience method b/72611341 - All deprecated classes have been removed from the API, including the remains of
recyclerview.extensionspackage, and theLivePagedListProvider. -
DataSource.Factoryis changed from an interface to an abstract class to enable map functionality.
رفع اشکالات
- Changed Builders to be final. b/70848565
- Room
DataSourceimplementation is now fixed to handle multi-table queries - this fix is contained within Room 1.1.0-beta1, see above. - Fixed a bug where
BoundaryCallback.onItemAtEndLoadedwould not be invoked forPositionalDataSourceif placeholders are enabled and the total size is an exact multiple of the page size.
Version 1.0.0-alpha5
January 22, 2018
رفع اشکالات
- Fix page loading when placeholders are disabled b/70573345
- Additional logging for tracking down IllegalArgumentException bug b/70360195 (and speculative Room-side fix)
- Javadoc sample code fixes b/70411933 , b/71467637