صفحه بندی

کتابخانه صفحه‌بندی (Paging Library) بارگذاری تدریجی و روان داده‌ها را در RecyclerView برنامه شما آسان‌تر می‌کند.

این جدول تمام مصنوعات موجود در گروه 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 برای بازیابی خطاهای بارگذاری هنگام استفاده از asState API اضافه شد. برای نمونه‌های بیشتر از کاربردهای 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 جدید PagingState closestItemAroundPosition اضافه شده است تا آیتم بارگذاری شده‌ای را که به موقعیت هدف نزدیک‌تر است و با گزاره ورودی مطابقت دارد، بازیابی کند. این می‌تواند برای تولید کلیدهای به‌روزرسانی مبتنی بر آیتم استفاده شود، جایی که آیتم ایده‌آل برای لنگر انداختن در اطراف است اما دقیقاً در موقعیت هدف نیست.

نسخه ۳.۴.۰-rc01

۱۴ ژانویه ۲۰۲۶

androidx.paging:paging-*:3.4.0-rc01 منتشر شد. نسخه 3.4.0-rc01 شامل این کامیت‌ها است.

ویژگی‌های جدید

نسخه ۳.۴.۰-بتا۰۱

۱۷ دسامبر ۲۰۲۵

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 جدید PagingState closestItemAroundPosition اضافه شده است تا آیتم بارگذاری شده‌ای را که به موقعیت هدف نزدیک‌تر است و با گزاره ورودی مطابقت دارد، بازیابی کند. این می‌تواند برای تولید کلیدهای به‌روزرسانی مبتنی بر آیتم استفاده شود که در آن‌ها آیتم ایده‌آل برای لنگر انداختن در اطراف است اما دقیقاً در موقعیت هدف قرار ندارد. ( 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

نسخه ۳.۴.۰-آلفا۰۲

۳۰ ژوئیه ۲۰۲۵

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 شامل این کامیت‌ها است.

ویژگی‌های جدید

رفع اشکالات

  • تست‌های واحد اندروید که Paging نسخه ۳.۳ یا بالاتر را دریافت می‌کنند، دیگر از PagingLogger ( Ia9400 ، b/331684448 ) اجرا نخواهند شد.
  • اشکالی که باعث می‌شد RecyclerView هنگام اسکرول کاربر هنگام به‌روزرسانی RecyclerView ( Id1f16 ، b/381024738 ) IndexOutOfBoundsException صادر کند، برطرف شد.
  • اشکالی که باعث می‌شد صفحه‌بندی هنگام رفرش کردن هنگام اسکرول کردن، نتواند بارگذاری‌های بیشتری را انجام دهد، برطرف شد. ( I60ca5 ، b/352586078 )
  • مشکل کرش کردن هنگام اسکرول کردن و رفرش کردن آیتم‌های صفحه‌بندی برطرف شد. ( I8c65a ، b/347649763 )

نسخه ۳.۳

نسخه ۳.۳.۶

۱۲ فوریه ۲۰۲۵

androidx.paging:paging-*:3.3.6 منتشر شد. نسخه ۳.۳.۶ شامل این کامیت‌ها است.

رفع اشکالات

  • سیگنال‌های به‌روزرسانی و تلاش مجدد که در طول به‌روزرسانی اولیه ارسال می‌شوند، اکنون ذخیره شده و پس از آماده شدن ارائه‌دهنده Paging، به‌طور خودکار دوباره ارسال می‌شوند.

مشارکت خارجی

  • از اوا بابت ارسال رفع اشکال ( #754 ) متشکریم.

نسخه ۳.۳.۵

۱۱ دسامبر ۲۰۲۴

androidx.paging:paging-*:3.3.5 منتشر شد. نسخه ۳.۳.۵ شامل این کامیت‌ها است.

رفع اشکالات

  • اشکالی که باعث می‌شد RecyclerView هنگام اسکرول کاربر هنگام به‌روزرسانی RecyclerView IndexOutOfBoundsException صادر کند، برطرف شد. ( 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 سفارشی به سازنده‌اش ارسال شوند. این با رفتار فعلی که هنگام ارسال به PagingDataAdapter LoadStates ارسال نمی‌کرد یا حالت‌های 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 )

مشارکت خارجی

نسخه ۳.۳.۰-آلفا۰۱

۲۰ سپتامبر ۲۰۲۳

  • این اولین نسخه چند پلتفرمی از کتابخانه‌های 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 @Preview Preview ارسال کنید.
    • پشتیبانی از تمام طرح‌بندی‌های تنبل مانند LazyVerticalGrid و HorizontalPager و همچنین کامپوننت‌های تنبل سفارشی از کتابخانه‌های Wear و TV. این امر از طریق متدهای افزونه جدید سطح پایین‌تر LazyPagingItems itemKey و 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 اضافه شده است که به جای CoroutineDispatcher CoroutineContext می‌پذیرند.
  • یک رابط تابعی جدید 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

نسخه ۳.۲.۰-alpha06

۲۴ مه ۲۰۲۳

androidx.paging:paging-*:3.2.0-alpha06 منتشر شد. نسخه 3.2.0-alpha06 شامل این کامیت‌ها است.

ویژگی‌های جدید

  • یک رابط تابعی جدید PagingSourceFactory اضافه شده است که سطح API صریح‌تری نسبت به لامبداهای موجود () -> PagingSource ارائه می‌دهد. این کارخانه می‌تواند برای نمونه‌سازی یک Pager استفاده شود. ( I33165 ، b/280655188 )
  • API جدید paging-testing List<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 )

تغییرات رفتاری

  • دیگر نیازی به اجرای تست‌های asSnapshot Paging توسط توزیع‌کننده اصلی نیست. تنظیم آن دیگر هیچ تغییری در رفتار تست ایجاد نمی‌کند. ( 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 )

مشارکت‌های خارجی

نسخه ۳.۲.۰-آلفا۰۴

۸ فوریه ۲۰۲۳

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 values
    

    asSnapshot یک متد 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 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 ) برطرف شد.

نسخه ۳.۲.۰-آلفا۰۱

۱ ژوئن ۲۰۲۲

androidx.paging:paging-*:3.2.0-alpha01 منتشر شد. نسخه 3.2.0-alpha01 شامل این کامیت‌ها است.

تغییرات API

  • سازنده‌هایی برای PagingDataAdapter و AsyncPagingDataDiffer اضافه شده است که به جای CoroutineDispatcher CoroutineContext می‌پذیرند. ( 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 اکنون همیشه به درستی با Loading for 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 برای RemoteMediator REFRESH می‌توانست 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) تنظیم شده است، ارسال نمی‌کنند. این به این معنی است که:

    1. اگر از RemoteMediator استفاده کنید، وضعیت‌های میانجی همیشه پر می‌شوند.
    2. ثبت یک شنونده‌ی 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 اضافه شده است که به جای CoroutineDispatcher CoroutineContext می‌پذیرند. ( 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 نیز تنظیم می‌کنید، ممکن است pageSize PagingConfig.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 شامل این کامیت‌ها است.

کتابخانه صفحه‌بندی به نسخه ۳.۰ به‌روزرسانی شده است تا چندین ویژگی جدید و مهم را فعال کند.

ویژگی‌های جدید نسخه ۳.۰

مشکلات شناخته شده

  • فایل‌های جاوای صفحه‌بندی ۳ هنوز در دسترس نیستند. در این فاصله، لطفاً از راهنماهای لینک‌شده در بالا یا مستندات کاتلین استفاده کنید. ( 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 for PagedList.Config.Builder
  • Added androidx.paging.PagedList() as a Kotlin alternative for PagedList.Builder
  • Added DataSourceFactory.toLiveData() as a Kotlin alternative for LivePagedListBuilder
  • Added DataSourceFactory.toObservable() and toFlowable() as Kotlin alternatives for RxPagedListBuilder
  • 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 throws IndexOutOfBoundsException when 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 PositionalDataSource and 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 where PagedListAdapter and AsyncPagedListDiffer would 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 PagedListAdapter and AsyncPagedListDiffer would 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();

ویژگی‌های جدید

  • RxPagedListBuilder is added via the new android.arch.paging:rxjava2 artifact.

تغییرات API

  • API changes to clarify the role of executors in builders:

    • Renamed setBackgroundThreadExecutor() to setFetchExecutor() (in PagedList.Builder and LivePagedListBuilder )

    • Renamed setMainThreadExecutor() to setNotifyExecutor() (in PagedList.Builder ).

  • Fixed PagedList.mCallbacks member to be private.

رفع اشکالات

  • LivePagedListBuilder triggers initial PagedList load on the specified executor, instead of the Arch Components IO thread pool.

  • Fixed invalidate behavior in internal DataSource wrappers (used to implement DataSource.map , as well as placeholder-disabled PositionalDataSource loading) 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.LoadParams objects now have a public constructor and DataSource.LoadCallback objects are now abstract. This enables wrapping a DataSource or directly testing a DataSource with 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 a DataSource .
    • 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.extensions package, and the LivePagedListProvider .
  • DataSource.Factory is changed from an interface to an abstract class to enable map functionality.

رفع اشکالات

  • Changed Builders to be final. b/70848565
  • Room DataSource implementation 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.onItemAtEndLoaded would not be invoked for PositionalDataSource if 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