صفحه‌بندی

«کتابخانه صفحه‌بندی» بار کردن تدریجی و زیبای داده‌ها را در RecyclerView برنامه شما آسان‌تر می‌کند.

این جدول همه آرتیفکت‌های گروه androidx.paging را فهرست می‌کند.

آرتیفکت نسخه پایدار نامزد انتشار انتشار نسخه بتا نسخه آلفا
paging-* ۳.۵.۳ - - -
paging-compose ۳.۵.۳ - - -
این کتابخانه آخرین‌بار در تاریخ ۱۲ اکتبر ۲۰۲۶ به‌روز شده است

اعلام وابستگی‌ها

برای افزودن وابستگی به «صفحه‌بندی»، باید مخزن Google Maven را به پروژه‌تان اضافه کنید. برای اطلاعات بیشتر، مخزن Maven در Google را بخوانید.

وابستگی‌های مصنوعات موردنیازتان را در فایل build.gradle برای برنامه یا واحدتان اضافه کنید:

شیک

dependencies {
  def paging_version = "3.5.3"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.5.3"
}

کاتلین

dependencies {
  val paging_version = "3.5.3"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.5.3")
}

برای کسب اطلاعات درباره استفاده از افزونه‌های Kotlin، به اسناد ktx مراجعه کنید.

برای اطلاعات بیشتر درباره وابستگی‌ها، افزودن وابستگی‌های ساخت را ببینید.

بازخورد

بازخورد شما به بهبود Jetpack کمک می‌کند. اگر مشکلات جدیدی پیدا کردید یا ایده‌هایی برای بهبود این کتابخانه دارید، به ما اطلاع دهید. لطفاً قبل‌از ایجاد مشکل جدید، مشکلات موجود در این کتابخانه را بررسی کنید. با کلیک کردن روی دکمه ستاره می‌توانید رأی خود را به یک مشکل موجود اضافه کنید.

ایجاد مشکل جدید

برای اطلاعات بیشتر، مستندات Issue Tracker را ببینید.

نسخه ۳.۵

نسخه ۳.۵.۳

‫۱۲ اکتبر ۲۰۲۶

‫androidx.paging:paging-*:3.5.3 منتشر شد. نسخه ۳.۵.۳ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • وقتی RemoteMediator به انتهای صفحه‌بندی در هر دو جهت برسد و «سرایند» یا «پاورقی» به جداکننده پایانی تبدیل شود، ItemSnapshotListFlow دیگر IllegalArgumentException را پرتاب نخواهد کرد. (I821c7، b/566336825)
  • وقتی صفحه بارشده از PagingConfig.maxSize فراتر رود، تعداد صفحه‌های بارشده به کمتر از دو صفحه کاهش نخواهد یافت تا اطمینان حاصل شود که درگاه دید به‌درستی با داده‌ها پر شده است. (I037a0،‏ b/565835910)

همیاری خارجی

از Igor برای ارسال رفع اشکال b/565835910 سپاس‌گزاریم

نسخه ۳.۵.۲

‫۷ اکتبر ۲۰۲۶

‫androidx.paging:paging-*:3.5.2 منتشر شد. نسخه ۳.۵.۲ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • Pager.append() تماس‌های قبل‌از تکمیل بازآوری اولیه دیگر NoSuchElementException را نشان نخواهد داد. The append call will be no-op. (Ide387, b/556780796)

نسخه ۳.۵.۱

‫۱۲ اوت ۲۰۲۶

‫androidx.paging:paging-*:3.5.1 منتشر شد. نسخه ۳.۵.۱ شامل این تعهدات است.

رفع اشکال‌ها

  • PagingSource.getRefreshKey که anchorPosition نادرستی را ارائه می‌کرد که هنگام بازآوری صفحه با جداکننده‌ها درحین پیمایش به جای‌بان‌ها بسیار بزرگ بود، برطرف شد. (I475f0, b/516565503)

نسخه ۳.۵.۰

‫۶ مه ۲۰۲۶

‫androidx.paging:paging-*:3.5.0 منتشر شد. نسخه ۳.۵.۰ حاوی این ثبت‌ها است.

تغییرات مهم از نسخه ۳.۴.۰:

  • عملگر Flow<PagingData>.asItemSnapshotListFlow برای تبدیل Flow<PagingData> به Flow<ItemSnapshotList> اضافه شد. این یعنی اکنون می‌توان به داده‌های بارشده خارج از لایه UI دسترسی داشت و به شما امکان می‌دهد Flow<ItemSnapshotList> را با منابع داده دیگر ترکیب کنید، داده‌های صفحه‌بندی‌شده را به‌صورت محلی در حافظه نهان ذخیره و اصلاح کنید، یا داده‌های صفحه‌بندی‌شده را به‌عنوان بخشی از وضعیت UI آشکار کنید و کارهای دیگری انجام دهید.

  • توابع افزونه Pager.append و Pager.prepend اضافه شد تا داده‌های بیشتری را بدون پیمایش به‌صورت دستی بار کنید.

  • توابع افزونه Pager.refresh و Paging.retry برای بازیابی از خطاهای بارگیری هنگام استفاده از asItemSnapshotListFlow API اضافه شد.

نسخه 3.5.0-rc01

‫۲۲ آوریل ۲۰۲۶

‫androidx.paging:paging-*:3.5.0-rc01 منتشر شد. نسخه 3.5.0-rc01 حاوی این موارد ارسال است.

بدون تغییر

  • تغییر قابل‌توجهی نسبت به نسخه 3.5.0-beta01 وجود ندارد.

نسخه 3.5.0-beta01

۸ آوریل ۲۰۲۶

‫androidx.paging:paging-*:3.5.0-beta01 منتشر شد. نسخه 3.5.0-beta01 شامل این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • نام Flow<PagingData>.asState API به Flow<PagingData>.asItemSnapshotListFlow تغییر کرده است (I0dc11، b/496548025)

نسخه 3.5.0-alpha01

‫۱۱ مارس ۲۰۲۶

‫androidx.paging:paging-*:3.5.0-alpha01 منتشر شد. نسخه 3.5.0-alpha01 شامل این تعهدها است.

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

  • عنصر paging-common اکنون حاوی یک عامل جریان asState جدید در Flow<PagingData> است تا آن را به Flow<ItemSnapshotList> تبدیل کند. این کار قابلیت‌هایی مانند موارد زیر را باز می‌کند:

    • ترکیب کردن جریان ItemSnapshotList با منابع داده دیگر
    • جریان را بدون cachedIn با چند جمع‌آوری‌کننده هم‌رسانی کنید
    • داده‌های صفحه‌بندی‌شده را به‌صورت محلی در حافظه نهان ذخیره کنید
    • اصلاح داده‌های صفحه‌بندی‌شده در حافظه
    • نمایش داده‌های صفحه‌بندی‌شده به‌عنوان بخشی از وضعیت میانای کاربر
    // In your ViewModel
    val pager = Pager(pagingConfig, pagingSourceFactory)
    val pagerFlow = pager.flow.asState()
    
    // alterantively convert the flow to a SharedFlow
    val pagerFlow = pager.flow.asState().stateIn()
    
    // In presenter layer
    val snapshotFlow = viewModel.pagerFlow.collectAsStateWithLifecycle(initialList)
    val snapshot = itemsFlow.value
    
    LazyColumn {
    items(items = snapshot.items) { ... }
    }
    
  • مصنوع paging-common همچنین میاناهای برنامه‌سازی کاربردی Pager.append و Pager.prepend را اضافه کرده است تا بارگیری‌ها را به‌صورت دستی در هریک از لبه‌های موارد بارشده راه‌اندازی کند.

    • وقتی با paging-runtime یا paging-compose استفاده می‌شود، علاوه‌بر پیمایش، روش دیگری برای بار کردن داده‌های بیشتر ارائه می‌دهد
    • وقتی با asState API جدید استفاده شود، تنها راه بار کردن داده‌های بیشتر است
    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 اضافه شد. برای نمونه‌های بیشتر استفاده از میاناهای برنامه‌سازی کاربردی جدید، این سند را ببینید. (I1e1e9، If3c87، Idbd48، Id1e1d، I816fe)

نسخه ۳.۴

نسخه ۳.۴.۲

۱۱ مارس ۲۰۲۶

‫androidx.paging:paging-*:3.4.2 منتشر شد. نسخه ۳.۴.۲ شامل این تعهدات است.

بدون تغییر

  • این نسخه در مقایسه با نسخه ۳.۴.۱ هیچ تغییری در رفتار یا میانای برنامه کاربردی ندارد.

نسخه ۳.۴.۱

‫۱۱ فوریه ۲۰۲۶

‫androidx.paging:paging-*:3.4.1 منتشر شد. نسخه ۳.۴.۱ حاوی این ثبت‌ها است.

به‌روزرسانی وابستگی

  • وابستگی guava مربوط به paging-guava از نسخه ۳۱.۱ به ۳۲.۰.۱ به‌روز شد.

نسخه ۳.۴.۰

‫۲۸ ژانویه ۲۰۲۶

‫androidx.paging:paging-*:3.4.0 منتشر شد. نسخه ۳.۴.۰ حاوی این ثبت‌ها است.

تغییرات مهم از نسخه ۳.۳.۰:

  • هدف‌های KMP بیشتری به paging-common،‏ paging-testing، و paging-compose اضافه شد. در مجموع، همه آن‌ها اکنون از JVM(Android و رایانه)، Native (‏Linux،‏ iOS،‏ watchOS،‏ tvOS،‏ macOS،‏ MinGW)، و Web (‏JavaScript،‏ WasmJS) پشتیبانی می‌کنند
  • ‫paging-common،‏ paging-testing، و paging-compose پشتیبانی از macosX64،‏ iosX64،‏ watchosX64، و tvosX64 را برای هم‌راستایی با منسوخ شدن هدف‌های macosX64 توسط Jetbrains برداشته است.
  • میانای برنامه‌سازی کاربردی جدید PagingState closestItemAroundPosition برای بازیابی مورد بارگیری‌شده‌ای که به موقعیت هدف نزدیک‌تر است و با گزاره ورودی مطابقت دارد اضافه شد. از این می‌توان برای تولید کلیدهای بازآوری براساس مورد استفاده کرد، درصورتی‌که مورد لنگرپذیر ایده‌آل در اطراف موقعیت هدف دقیق باشد اما در آن نباشد.

نسخه 3.4.0-rc01

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

‫androidx.paging:paging-*:3.4.0-rc01 منتشر شد. نسخه 3.4.0-rc01 حاوی این commitها است.

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

نسخه 3.4.0-beta01

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

‫androidx.paging:paging-*:3.4.0-beta01 منتشر شد. نسخه 3.4.0-beta01 شامل این تعهدات است.

رفع اشکال‌ها

  • Fix race between RecyclerView and Refresh loads leading to IndexOutOfBoundsException in RecyclerView. به‌روزرسانی‌های منقطع واسط کاربر به‌دلیل بارگیری‌های مداوم Refresh می‌تواند باعث شود وضعیت «صفحه‌بندی» با RecyclerView همگام‌سازی نشود. این مشکل با بازنشانی «صفحه‌بندی» به وضعیت قبل‌از «بازآوری» درصورت قطع شدن «بازآوری» (یعنی با بار Refresh متوالی) برطرف می‌شود. (I771b0، b/409809768)

نسخه 3.4.0-alpha04

‫۱۰ سپتامبر ۲۰۲۵

‫androidx.paging:paging-*:3.4.0-alpha04 منتشر شد. نسخه 3.4.0-alpha04 حاوی این موارد ثبت است.

تغییرات میانای برنامه‌سازی کاربردی

  • PagingState API closestItemAroundPosition جدیدی برای بازیابی مورد بارشده که به موقعیت هدف نزدیک‌تر است و با گزاره ورودی مطابقت دارد اضافه شد. از این ویژگی می‌توان برای تولید کلیدهای بازآوری مبتنی بر مورد استفاده کرد، جایی که مورد قابل‌لنگراندازی ایده‌آل در اطراف موقعیت هدف دقیق قرار دارد اما دقیقاً در آن موقعیت نیست. (I96e5c،‏ b/440187139)

نسخه 3.4.0-alpha03

‫۲۷ اوت ۲۰۲۵

‫androidx.paging:paging-*:3.4.0-alpha03 منتشر شد. نسخه 3.4.0-alpha03 حاوی این ارسال‌ها است.

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

  • Paging-common رایانه را به‌عنوان هدف جدید Kotlin Multiplatform (KMP) اضافه کرده است. در مجموع، اکنون از JVM(Android و رایانه)، Native (‏Linux،‏ iOS،‏ watchOS،‏ tvOS،‏ macOS،‏ MinGW)، و Web (‏JavaScript،‏ WasmJS) پشتیبانی می‌کند. (Id2483، b/436884811)
  • هدف‌های جدید «چندپلاتفرمی Kotlin» (KMP) به آزمایش صفحه‌بندی اضافه شده است. در مجموع، اکنون از JVM(Android و رایانه)، Native (‏Linux،‏ iOS،‏ watchOS،‏ tvOS،‏ macOS،‏ MinGW)، و Web (‏JavaScript،‏ WasmJS) پشتیبانی می‌کند. (I0c543،‏ b/435014650)
  • ‫Paging-compose هدف‌های جدید Kotlin چندپلاتفرمی (KMP) را اضافه کرده است. درمجموع، اکنون از JVM(Android و رایانه)، Native (Linux،‏ iOS،‏ watchOS،‏ tvOS،‏ macOS،‏ MinGW)، و وب (JavaScript،‏ WasmJS) پشتیبانی می‌کند. (I70d44، b/436884801)

تغییرات میانای برنامه‌سازی کاربردی

  • انتقال minSdk پیش‌فرض از میانای برنامه‌سازی کاربردی ۲۱ به میانای برنامه‌سازی کاربردی ۲۳ (Ibdfca، b/380448311، b/435705964، b/435705223)

نسخه 3.4.0-alpha02

‫۳۰ ژوئیه ۲۰۲۵

‫androidx.paging:paging-*:3.4.0-alpha02 منتشر شد. نسخه 3.4.0-alpha02 حاوی این ارسال‌ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • PagingData.from اکنون اجازه می‌دهد placeholdersBefore و placeholdersAfter را تنظیم کنید. توجه داشته باشید که پیمایش در این جای‌بان‌ها باعث بارگیری نمی‌شود. (I06983)

نسخه 3.4.0-alpha01

‫۲ ژوئیه ۲۰۲۵

‫androidx.paging:paging-*:3.4.0-alpha01 منتشر شد. نسخه 3.4.0-alpha01 حاوی این ارسال‌ها است.

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

رفع اشکال‌ها

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

نسخه ۳.۳

نسخه ۳.۳.۶

‫۱۲ فوریه ۲۰۲۵

‫androidx.paging:paging-*:3.3.6 منتشر شد. نسخه ۳.۳.۶ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • سیگنال‌های بازآوری و تکرار ارسال‌شده درطول بازآوری اولیه اکنون ذخیره می‌شوند و به‌محض آماده شدن ارائه‌دهنده صفحه‌بندی، به‌طور خودکار دوباره ارسال می‌شوند.

همیاری خارجی

  • از Eva برای ارسال رفع اشکال (#۷۵۴) سپاس‌گزاریم

نسخه ۳.۳.۵

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

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

رفع اشکال‌ها

  • اشکالی برطرف شد که در آن RecyclerView هنگام پیمایش کاربر درحین به‌روزرسانی RecyclerView، IndexOutOfBoundsException را پرتاب می‌کرد. (Id1f16، b/381024738)

نسخه ۳.۳.۴

‫۱۳ نوامبر ۲۰۲۴

‫androidx.paging:paging-*:3.3.4 منتشر شد. نسخه ۳.۳.۴ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • آزمایش‌های واحد Android که Paging 3.3 یا نسخه‌های جدیدتر را فراخوانی می‌کنند دیگر خطایی مثل Method isLoggable in android.util.Log not mocked را ایجاد نمی‌کنند. (Ia9400، b/331684448)

نسخه ۳.۳.۲

‫۷ اوت ۲۰۲۴

‫androidx.paging:paging-*:3.3.2 منتشر شد. نسخه ۳.۳.۲ حاوی این ثبت‌ها است.

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

  • ‫paging-common و paging-testing هدف‌های جدید Kotlin-Multiplatform را اضافه کرده‌اند: watchos، tvos، و linuxArm64 (90c9768)، (53e0eca)

نسخه ۳.۳.۱

‫۲۴ ژوئیه ۲۰۲۴

‫androidx.paging:paging-*:3.3.1 منتشر شد. نسخه ۳.۳.۱ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • رفع مشکلی که در آن AsyncPagingDataDiffer یا میاناهای برنامه‌سازی کاربردی ساخته‌شده روی آن مثل PagingDataAdapter استفاده‌شده با RecyclerView نمی‌توانست بارگذاری‌های بیشتری را وقتی منبع داده پشتیبان درحین پیمایش بازآوری می‌شد راه‌اندازی کند. (I60ca5،‏ b/352586078)
  • رفع خرابی‌ای که هنگام برداشتن موارد از منبع داده پشتیبان درحین پیمایش RecyclerView بااستفاده از PagingDataAdapter یا AsyncPagingDataDiffer رخ می‌داد. (I8c65a، b/347649763)

نسخه ۳.۳.۰

‫۱۴ مه ۲۰۲۴

‫androidx.paging:paging-*:3.3.0 منتشر شد. نسخه ۳.۳.۰ حاوی این ثبت‌ها است.

تغییرات مهم از نسخه ۳.۲.۰

  • PagingDataPresenter اکنون کلاس عمومی است. اکنون می‌توان ارائه‌دهندگان چندپلاتفرمی را به‌جای نیاز به میاناهای برنامه‌سازی کاربردی صفحه‌بندی داخلی یا AsyncPagingDataDiffer paging-runtime، روی PagingDataPresenter ساخت.
  • روش‌های کمکی جدید LoadStates و CombinedLoadStates در hasError و isIdle اضافه شد تا بررسی شود که آیا LoadStates به‌ترتیب در وضعیت «خطا» یا NotLoading است یا نه. همچنین روش افزونه Kotlin جدیدی به awaitNotLoading() در Flow<CombinedLoadStates> اضافه شد که تا زمانی که بارگذاری در حالت NotLoading یا «خطا» قرار گیرد منتظر می‌ماند.
  • PagingData.empty() اکنون به‌طور پیش‌فرض حالت‌های NotLoading را ارسال می‌کند، مگراینکه LoadStates سفارشی به سازنده آن منتقل شود. این با رفتار فعلی که در آن LoadStates هنگام ارسال به PagingDataAdapter ارسال نمی‌شود یا حالت‌های «درحال بار کردن» را هنگام جمع‌آوری به‌عنوان LazyPagingItems ارسال می‌کند، متفاوت است. وقتی به‌عنوان LazyPagingItems جمع‌آوری می‌شود، اکنون بلافاصله پس‌از ترکیب‌بندی اولیه، فهرست خالی را نیز نمایش می‌دهد.

سازگاری Kotlin چندپلاتفرمی

اکنون Paging مصنوعات سازگار با Kotlin Multiplatform را ارسال می‌کند، که بخش عمده‌ای از آن به‌لطف کار بالادستی از پروژه multiplatform-paging CashApp است.

  • ‫paging-common همه میاناهای برنامه‌سازی کاربردی Paging 3 را به common منتقل کرده است و اکنون علاوه‌بر Android با jvm و iOS نیز سازگار است.
  • ‫paging-testing کد خود را به common منتقل کرده است و اکنون علاوه‌بر Android با jvm و iOS نیز سازگار است.
  • paging-compose کد خود را به common منتقل کرده است و یک آرتیفکت Android را ارسال می‌کند که با پشتیبانی چندپلاتفرمی androidx.compose مطابقت دارد.
  • ‫paging-runtime، paging-guava، paging-rxjava2، و paging-rxjava3 فقط برای Android باقی خواهند ماند.

نسخه ۳.۳.۰-rc۰۱

‫۱ مه ۲۰۲۴

‫androidx.paging:paging-*:3.3.0-rc01 بدون هیچ تغییری در Paging 3.3.0-beta01 منتشر شد. نسخه 3.3.0-rc01 حاوی این کدهای تاییدشده است.

نسخه 3.3.0-beta01

۳ آوریل ۲۰۲۴

androidx.paging:paging-*:3.3.0-beta01 بدون تغییرات قابل‌توجهی منتشر شده است. نسخه 3.3.0-beta01 حاوی این ارسال‌ها است.

نسخه 3.3.0-alpha05

‫۲۰ مارس ۲۰۲۴

‫androidx.paging:paging-*:3.3.0-alpha05 منتشر شد. نسخه 3.3.0-alpha05 شامل این تغییرات است.

تغییرات میانای برنامه‌سازی کاربردی

  • اکنون «صفحه‌بندی» از دستورات AndroidX Annotation @MainThread برای کد مشترک استفاده می‌کند. (I78f0d، b/327682438)

نسخه 3.3.0-alpha04

۶ مارس ۲۰۲۴

‫androidx.paging:paging-*:3.3.0-alpha04 منتشر شد. نسخه 3.3.0-alpha04 حاوی این موارد ثبت است.

رفع اشکال‌ها

  • خطاهای جزئی مستندات مربوط به افزودن سازگاری چندپلاتفرمی Kotlin برطرف شد. (aosp/2950785)

نسخه ۳.۳.۰-alpha03

۷ فوریه ۲۰۲۴

‫androidx.paging:paging-*:3.3.0-alpha03 منتشر شد. نسخه 3.3.0-alpha03 حاوی این commitها است.

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

  • PagingDataPresenter اکنون کلاس عمومی است. اکنون می‌توان ارائه‌دهنده‌های چندپلاتفرمی را به‌جای نیاز به میاناهای برنامه‌سازی کاربردی صفحه‌بندی داخلی یا AsyncPagingDataDiffer paging-runtime، روی PagingDataPresenter ساخت. (Id1f74، b/315214786)
  • روش‌های کمکی جدید LoadStates و CombinedLoadStates برای بررسی اینکه آیا LoadStates در وضعیت «خطا» یا NotLoading است اضافه شد. همچنین یک API جدید اضافه شد که تا زمانی که بار در وضعیت NotLoading یا «خطا» قرار گیرد، در LoadStateFlow منتظر می‌ماند. (Id6c67)

تغییر رفتار

  • PagingData.empty() اکنون به‌طور پیش‌فرض حالت‌های NotLoading را ارسال می‌کند، مگراینکه LoadStates سفارشی به سازنده آن منتقل شود. این با رفتار فعلی که در آن LoadStates هنگام ارسال به PagingDataAdapter ارسال نمی‌شود یا حالت‌های «درحال بار کردن» را هنگام جمع‌آوری به‌عنوان LazyPagingItems ارسال می‌کند، متفاوت است. وقتی به‌عنوان LazyPagingItems جمع‌آوری می‌شود، اکنون بلافاصله پس‌از ترکیب اولیه، فهرست خالی را نیز نمایش می‌دهد. (I4d11d،‏ b/301833847)

نسخه 3.3.0-alpha02

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

‫androidx.paging:paging-*:3.3.0-alpha02 منتشر شد. نسخه 3.3.0-alpha02 حاوی این commit-ها است.

سازگاری Kotlin چندپلاتفرمی

اکنون Paging مصنوعات سازگار با Kotlin Multiplatform را ارائه می‌دهد که بخش عمده آن به‌لطف کار بالادستی از پروژه multiplatform-paging CashApp است. این کار به ما کمک می‌کند از واگرایی بین دو مخزن جلوگیری کنیم و آن‌ها را سازگار نگه داریم.

  • ‫paging-common همه «میاناهای برنامه‌سازی کاربردی» Paging 3 را به common منتقل کرده است و اکنون علاوه‌بر Android، با jvm و iOS نیز سازگار است.
  • ‫paging-testing کد خود را به common منتقل کرده است و اکنون علاوه‌بر Android با jvm و iOS نیز سازگار است.
  • paging-compose کد خود را به common منتقل کرده است و یک آرتیفکت Android را ارسال می‌کند که با پشتیبانی چندپلاتفرمی androidx.compose مطابقت دارد.
  • ‫paging-runtime،‏ paging-guava،‏ paging-rxjava2، و paging-rxjava3 فقط در Android دردسترس خواهند بود.

تغییرات میانای برنامه‌سازی کاربردی

  • میانای عمومی Logger که فقط برای استفاده داخلی درنظر گرفته شده بود منسوخ شده است (I16e95، b/288623117)

همیاری خارجی

نسخه 3.3.0-alpha01

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

  • این اولین نسخه پخش چندسکویی کتابخانه‌های androidx.paging است. این نسخه فقط آرتیفکت‌های *-jvm و *-android را دارد. برای انواع macOS،‏ iOS، و linux، از 3.3.0-alpha02 استفاده کنید.

نسخه ۳.۲

نسخه ۳.۲.۱

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

‫androidx.paging:paging-*:3.2.1 منتشر شد. نسخه ۳.۲.۱ حاوی این تعهدات است.

رفع اشکال‌ها

  • مشکل مربوط به API‏ asSnapshot() در مصنوع Paging Testing برطرف شد که در آن، وقتی Flow ساخته‌شده بااستفاده از PagingData.from(List) ارسال می‌شد، API‏ asSnapshot() متوقف می‌شد زیرا هیچ اطلاعاتی درباره زمان پایان بارگیری نداشت (برخلاف سربارگذاری PagingData.from(List, LoadStates)). این راهکار موقت فقط برای «جریان‌های کاری» تکمیل‌شدنی (برای نمونه، flowOf(PagingData.from(...))) کار می‌کند. برای «جریان‌های کاری» تکمیل‌نشدنی (برای نمونه، MutableStateFlow، از سربار PagingData.from که LoadStates را ارائه می‌دهد استفاده کنید). (I502c3)
  • Paging Compose اکنون به‌طور داخلی از AndroidUiDispatcher.Main استفاده می‌کند تا مطمئن شود داده‌های جدید در همان قاب تکمیل بارگیری دردسترس است. (Ia55af)

نسخه ۳.۲.۰

۲۶ ژوئیه ۲۰۲۳

‫androidx.paging:paging-*:3.2.0 منتشر شد. نسخه ۳.۲.۰ حاوی این ثبت‌ها است.

تغییرات مهم از نسخه ۳.۱.۰

  • «صفحه‌بندی نوشتن» به پایداری «میانای برنامه‌سازی کاربردی» رسیده است و با بقیه «صفحه‌بندی» ادغام شده است و اکنون نسخه آن با همه عناصر دیگر «صفحه‌بندی» مطابقت دارد. تغییرات از نسخه ۳.۱.۰ شامل موارد زیر است:
    • پشتیبانی از پیش‌نمایش فهرست داده‌های جعلی با ایجاد PagingData.from(fakeData) و پیچیدن آن PagingData در MutableStateFlow (برای نمونه MutableStateFlow(PagingData.from(listOf(1, 2, 3)))). این جاری‌سازی را به‌عنوان گیرنده برای collectAsLazyPagingItems() به @Preview عنصر ترکیبی ارسال کنید تا پیش‌نمایش شود.
    • پشتیبانی از همه چیدمان‌های تنبل مانند LazyVerticalGrid و HorizontalPager و همچنین مؤلفه‌های تنبل سفارشی از کتابخانه‌های Wear و TV. این امر ازطریق روش‌های افزونه LazyPagingItems سطح پایین‌تر جدید itemKey و itemContentType به‌دست آمد که به شما کمک می‌کند پارامترهای key و contentType را در میاناهای برنامه‌سازی کاربردی استاندارد items که ازقبل برای LazyColumn، LazyVerticalGrid و همچنین معادل‌های آن‌ها در میاناهای برنامه‌سازی کاربردی مانند HorizontalPager وجود دارند پیاده‌سازی کنید.
    • items(lazyPagingItems) و itemsIndexed(lazyPagingItems) که فقط از LazyListScope پشتیبانی می‌کنند منسوخ شده‌اند.
  • ساخته جدید paging-testing که میاناهای برنامه‌سازی کاربردی‌ای را ارائه می‌دهد که برای آزمایش واحد هر لایه از برنامه شما و ادغام آن با «صفحه‌بندی» به‌صورت مجزا طراحی شده‌اند. برای مثال، شامل موارد زیر است
    • TestPager کلاس که به شما امکان می‌دهد رفتار پیاده‌سازی PagingSource سفارشی خود را مستقل از Pager و میانای کاربر واقعی اعتبارسنجی کنید.
    • ​​asPagingSourceFactory میاناهای برنامه‌سازی کاربردی برای تبدیل Flow<List<Value>> یا List<Value> ایستا به PagingSourceFactory که می‌تواند در آزمایش‌ها به «صفحه‌بندی» منتقل شود
    • افزونه asSnapshot Kotlin در Flow<PagingData<Value>> که Flow<PagingData<Value>> را به List<Value> مستقیم ترجمه می‌کند. asSnapshot lambda به شما امکان می‌دهد تا ازطریق میاناهای برنامه‌سازی کاربردی مثل scrollTo یا appendScrollWhile، واسط کاربر برنامه‌تان را تقلید کنید تا بتوانید در هر نقطه‌ای از مجموعه داده‌های صفحه‌بندی‌شده‌تان، درست بودن عکس آنی داده‌ها را درستی‌سنجی کنید.
  • گزارش‌های پیش‌فرض برای نمایش اطلاعات اشکال‌زدایی «صفحه‌بندی» در دو سطح اضافه شد: VERBOSE و DEBUG. گزارش‌های رویداد را می‌توان ازطریق فرمان adb shell setprop log.tag.Paging [DEBUG|VERBOSE] فعال کرد. این مورد هم برای «صفحه‌بندی با نماها» و هم برای «صفحه‌بندی با نوشتن» اعمال می‌شود.
  • سازنده‌هایی برای PagingDataAdapter و AsyncPagingDataDiffer اضافه شده است که به‌جای CoroutineDispatcher، CoroutineContext را می‌پذیرند.
  • میانای کاربردی PagingSourceFactory جدیدی اضافه شده است که سطح API صریح‌تری نسبت‌به لامبداهای () -> PagingSource قبلی ارائه می‌دهد. This factory can be used to instantiate a Pager.

نسخه 3.2.0-rc01

۲۱ ژوئن ۲۰۲۳

‫androidx.paging:paging-*:3.2.0-rc01 منتشر شد. نسخه 3.2.0-rc01 شامل این موارد است.

همیاری خارجی

  • از Veyndan به‌خاطر مشارکت در دور کردن «صفحه‌بندی» از ویژگی‌های خاص Android/JVM سپاس‌گزاریم. (#553، #554، #555، #559)

نسخه 3.2.0-beta01

۷ ژوئن ۲۰۲۳

‫androidx.paging:paging-*:3.2.0-beta01 منتشر شد. نسخه 3.2.0-beta01 حاوی این commit-ها است.

Paging Compose

  • «صفحه‌بندی Compose» رسماً به پایداری میانای برنامه‌سازی کاربردی رسیده است. به همین دلیل، نسخه از 1.0.0-alpha20 به‌روزرسانی شده است تا با نسخه سایر مصنوعات Paging مطابقت داشته باشد.

تغییرات میانای برنامه‌سازی کاربردی

نسخه 3.2.0-alpha06

۲۴ مه ۲۰۲۳

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

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

  • میانای کاربردی جدید PagingSourceFactory اضافه شد که سطح میانای برنامه‌سازی کاربردی صریح‌تری نسبت‌به لامبداهای () -> PagingSource موجود ارائه می‌دهد. از این کارخانه می‌توان برای نمونه‌سازی Pager استفاده کرد. (I33165، b/280655188)
  • میانای برنامه‌سازی کاربردی جدید paging-testing از List<Value>.asPagingSourceFactory() اضافه شد تا PagingSourceFactory دریافت شود که فقط از فهرست تغییرناپذیر داده‌ها بارگیری می‌شود. افزونه موجود در Flow<List<Value>> همچنان باید برای آزمایش با چندین نسل از داده‌های ایستا استفاده شود. (Id34d1، b/280655188)

تغییرات میانای برنامه‌سازی کاربردی

  • اکنون همه میاناهای برنامه‌سازی کاربردی عمومی در paging-testing با @VisibleForTesting حاشیه‌نویسی شده‌اند تا اطمینان حاصل شود که این میاناهای برنامه‌سازی کاربردی فقط در آزمایش‌ها استفاده می‌شوند. (I7db6e)
  • میانای برنامه‌سازی کاربردی asSnapshot دیگر نیازی به ارسال CoroutineScope ندارد. اکنون به‌طور پیش‌فرض از بافت به‌ارث‌رسیده از دامنه ولی خود استفاده می‌کند. (Id0a78، b/282240990)
  • پارامترهای سازنده TestPager دوباره مرتب شدند تا به‌طور شهودی با ترتیب پارامترهای سازنده واقعی Pager مطابقت داشته باشند (I6185a)
  • استفاده از نوع لامبدا () -> PagingSource<Key, Value> در «آزمایش صفحه‌بندی» به نوع PagingSourceFactory<Key, Value> انتقال یافت. (I4a950، b/280655188)

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

  • دیگر برای اجرای آزمایش‌های asSnapshot «صفحه‌بندی»، به توزیع‌کننده اصلی نیاز نیست. تنظیم آن دیگر هیچ تغییری در رفتار آزمایش ایجاد نمی‌کند. (Ie56ea)

نسخه 3.2.0-alpha05

۳ مه ۲۰۲۳

‫androidx.paging:paging-*:3.2.0-alpha05 منتشر شد. نسخه 3.2.0-alpha05 حاوی این ارسال‌ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • اکنون میانای برنامه‌سازی کاربردی Paging Testing مربوط به asSnapshot پارامتر loadOperations خود را به‌طور پیش‌فرض روی لامبدای خالی تنظیم می‌کند. این کار امکان فراخوانی asSnapshot را بدون ارسال هیچ‌گونه عملیات بارگیری برای بازیابی داده‌ها از بارگیری بازآوری اولیه فراهم می‌کند. (Ied354، b/277233770)

بهبود مستندات

  • اسناد مربوط به asPagingSourceFactory() را به‌روزرسانی کردیم تا مشخص شود که این یک روش افزونه در Flow است که یک کارخانه قابل‌استفاده مجدد برای تولید نمونه‌های PagingSource برمی‌گرداند. (I5ff4f، I705b5)
  • اسناد مربوط به سازنده LoadResult.Page به‌روزرسانی شد تا نیاز به لغو itemsBefore و itemsAfter برای پشتیبانی از پرش شفاف‌سازی شود. (Ied354)

همیاری‌های خارجی

نسخه 3.2.0-alpha04

۸ فوریه ۲۰۲۳

‫androidx.paging:paging-*:3.2.0-alpha04 منتشر شد. نسخه 3.2.0-alpha04 شامل این commit-ها است.

آزمایش صفحه‌بندی

  • ساخت‌افزار paging-testing اکنون حاوی روش asPagingSourceFactory برای ایجاد pagingSourceFactory از Flow<List<Value>> است تا به «پیجر» ارائه شود. هر List<Value>> منتشرشده از «جریان» نشان‌دهنده تولید داده‌های صفحه‌بندی‌شده است. این کار آزمایش‌های صفحه‌بندی را، برای مثال، در PagingData تبدیل با جعل منبع داده برای جمع‌آوری «صفحه‌بند» تسهیل می‌کند. (I6f230، b/235528239)
  • paging-testing آرتیفکت با میاناهای برنامه کاربردی جدیدی که برای درستی‌سنجی داده‌های موجود در Flow<PagingData<T>> مناسب است گسترش یافته است. برای مثال، می‌توان از این برای تأیید برونداد Flow<PagingData<T>> از لایه ViewModel استفاده کرد.

    این کار ازطریق افزونه Kotlin asSnapshot در Flow<PagingData<Value>> انجام می‌شود که Flow<PagingData<Value>> را به List<Value> مستقیم ترجمه می‌کند. ‫asSnapshot لامبدا به شما امکان می‌دهد ازطریق «میاناهای برنامه‌سازی کاربردی» مثل scrollTo یا appendScrollWhile، از واسط کاربر برنامه‌تان تقلید کنید، به‌گونه‌ای که تکرارپذیر و یکپارچه باشد تا بتوانید در هر نقطه از مجموعه داده‌های صفحه‌بندی‌شده‌تان، درست بودن چسبان داده‌ها را تأیید کنید.

    // Create your ViewModel instance
    val viewModel = …
    // Get the Flow of PagingData from the ViewModel
    val data< Flow<PagingData<String>> = viewModel.data
    val snapshot: List<String> = data.asSnapshot {
      // Each operation inside the lambda waits for the data to settle before continuing
      scrollTo(index = 50)
    
      // While you can’t view the items within the asSnapshot call,
      // you can continuously scroll in a direction while some condition is true
      // i.e., in this case until you hit a placeholder item
      appendScrollWhile {  item: String -> item != “Header 1” }
    }
    // With the asSnapshot complete, you can now verify that the snapshot
    // has the expected values
    

    ‫asSnapshot یک روش suspend است که انتظار می‌رود در runTest اجرا شود. برای اطلاعات بیشتر، آزمایش کردن روال‌های مشترک Kotlin در Android را ببینید. (I55fd2،‏ I5bd26،‏ I7ce34،‏ I51f4d،‏ I2249f،‏ Id6223،‏ Ic4bab،‏ Ib29b9،‏ Ic1238،‏ I96def،‏ b/235528239)

تغییرات میانای برنامه‌سازی کاربردی

  • فراخوانی‌های واسط کاربر به getItem و peek در AsyncPagingDataDiffer و PagingDataAdapter اکنون به‌درستی به‌عنوان قابل‌فراخوانی فقط در رشته «اصلی» علامت‌گذاری شده‌اند. (I699b6)
  • نویسه‌های عام از انواع عمومی مورداستفاده TestPager برداشته شد تا استفاده از نتایج این روش‌ها در کد نوشته‌شده به زبان برنامه‌نویسی Java آسان‌تر شود. (I56c42)

نسخه 3.2.0-alpha03

‫۲۴ اکتبر ۲۰۲۲

‫androidx.paging:paging-*:3.2.0-alpha03 منتشر شد. نسخه 3.2.0-alpha03 شامل این commit-ها است.

آزمایش صفحه‌بندی

این نسخهٔ پخش حاوی آرتیفکت جدیدی است: paging-testing. این آرتیفکت میاناهای برنامه‌سازی کاربردی‌ای ارائه می‌دهد که برای آزمایش واحد هر لایه از برنامه شما و ادغام آن با «صفحه‌بندی» به‌صورت مجزا طراحی شده‌اند.

برای مثال، این نسخه پخش اول شامل کلاس TestPager است که به شما امکان می‌دهد رفتار پیاده‌سازی PagingSource سفارشی خود را مستقل از Pager و میانای کاربر واقعی که معمولاً برای شبیه‌سازی ادغام «صفحه‌بندی» سرتاسری نیاز دارید، اعتبارسنجی کنید.

TestPager باید به‌عنوان یک جعلی درنظر گرفته شود - یک بدل آزمایشی که پیاده‌سازی واقعی Pager را منعکس می‌کند و درعین‌حال یک سطح API ساده‌شده برای آزمایش PagingSource ارائه می‌دهد. این میاناهای برنامه‌سازی کاربردی، میاناهای برنامه‌سازی کاربردی suspend هستند و باید در runTest اجرا شوند، همان‌طور که در راهنمای آزمایش کردن روال‌های مشترک Kotlin در Android توضیح داده شده است.

نمونه‌ای از این میاناهای برنامه‌سازی کاربردی درحال استفاده را می‌توانید در آزمایش‌های room-paging پیدا کنید که برای استفاده از TestPager بازسازی شده‌اند.

تغییرات میانای برنامه‌سازی کاربردی

  • تکرار راحت را ازطریق LoadResult.Page.data تا LoadResult.Page.iterator() فعال می‌کند. این کار به‌طور غیرمستقیم اجازه می‌دهد از روش کتابخانه استاندارد Kotlin flatten هنگام ارائه List<LoadResult.Page> استفاده شود، مثلاً با ویژگی pages از PagingState که به روش PagingSource.getRefreshKey منتقل می‌شود. (Ie0718)

نسخه 3.2.0-alpha02

‫۱۰ اوت ۲۰۲۲

‫androidx.paging:paging-*:3.2.0-alpha02 منتشر شد. نسخه 3.2.0-alpha02 حاوی این commitها است.

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

  • اکنون Paging گزارش‌ها را ازطریق کلاس‌های AsyncPagingDataDiffer یا PagingDataAdapter ارائه می‌دهد تا اطلاعات اشکال‌زدایی جمع‌آوری‌شده از PagingData را نمایش دهد.
  • گزارش‌ها را می‌توان ازطریق فرمان adb shell فعال کرد adb shell setprop log.tag.Paging [DEBUG|VERBOSE].(b/235527159)

رفع اشکال‌ها

  • خطای سازنده PagingDataDiffer که هنگام استفاده از paging-common:3.2.0-alpha01 با زمان اجرای paging-runtime:3.1.1 یا قدیمی‌تر وجود داشت برطرف شد.(b/235256201)

نسخه 3.2.0-alpha01

‫۱ ژوئن ۲۰۲۲

‫androidx.paging:paging-*:3.2.0-alpha01 منتشر شد. نسخه 3.2.0-alpha01 حاوی این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • سازنده‌هایی برای PagingDataAdapter و AsyncPagingDataDiffer اضافه شد که به‌جای CoroutineDispatcher، CoroutineContext را می‌پذیرند. (Idc878)
  • به‌طور پیش‌فرض، PagingData.from() و PagingData.empty() دیگر روی CombinedLoadStates در سمت ارائه‌دهنده تأثیر نخواهند گذاشت. یک سربارگذاری جدید که امکان ارسال sourceLoadStates و remoteLoadStates به این سازنده‌ها را فراهم می‌کند، اضافه شده است تا رفتار موجود تنظیم LoadStates را حفظ کند تا کاملاً پایانه باشد (یعنی، NotLoading(endOfPaginationReached = false))، با گزینه افزودن وضعیت‌های کنترل از دور درصورت نیاز. اگر LoadStates ارسال نشود، CombinedLoadStates قبلی در سمت ارائه‌دهنده هنگام دریافت PagingData ایستا حفظ خواهد شد. (Ic3ce5، b/205344028)

رفع اشکال‌ها

  • اکنون نتیجه PagingSource.getRefreshKey() به‌درستی بر initialKey در مواردی که مقدار تهی برمی‌گرداند اولویت دارد، اما initialKey غیرتهی تنظیم شده است. (Ic9542، b/230391606)

همیاری خارجی

  • Updated :compose:ui:ui-test api (updateApi) due to test-coroutines-lib migration (I3366d)

نسخه ۳.۱

نسخه ۳.۱.۱

۹ مارس ۲۰۲۲

‫androidx.paging:paging-*:3.1.1 منتشر شد. نسخه ۳.۱.۱ شامل این موارد است.

رفع اشکال‌ها

  • رویدادهای LoadState.NotLoading واسط بین نسل‌ها که به‌اشتباه توسط .cachedIn() درج شده بود برداشته شد. این تغییر با حذف رویدادهای زائد LoadState.NotLoading که بین تلاش مجدد برای بارگیری‌های ناموفق، هنگام بازآوری، یا درطول نامعتبرسازی ایجاد می‌شدند، واکنش نشان دادن به تغییرات LoadState را بسیار آسان‌تر می‌کند.

نسخه ۳.۱.۰

‫۱۷ نوامبر ۲۰۲۱

‫androidx.paging:paging-*:3.1.0 منتشر شد. نسخه ۳.۱.۰ حاوی این تعهدها است.

تغییرات مهم از نسخه ۳.۰.۰

  • میاناهای برنامه‌سازی کاربردی Flow<PagingData>.observable و Flow<PagingData>.flowable دیگر آزمایشی نیستند
  • رفتار به LoadState تغییر می‌کند:
    • ‫endOfPaginationReached اکنون همیشه false برای LoadType.REFRESH برای هر دو PagingSource و RemoteMediator است
    • ‫LoadStates از Paging اکنون قبل‌از انتشار در پایین‌دست، منتظر مقادیر معتبر از PagingSource و RemoteMediator است. نسل‌های جدید PagingData اکنون همیشه به‌درستی با Loading برای حالت بازآوری شروع می‌شوند، به‌جای اینکه در برخی موارد به‌اشتباه به NotLoading بازنشانی شوند.
    • ‫.loadStateFlow و .addLoadStateListener در میاناهای برنامه‌سازی کاربردی ارائه‌دهنده دیگر به‌طور زائد CombinedLoadStates اولیه ارسال نمی‌کنند که همیشه وضعیت‌های میانجی روی null تنظیم شده باشد
  • لغو نسل‌های قبلی اکنون با اشتیاق درصورت نامعتبر شدن / نسل‌های جدید انجام می‌شود. دیگر نیازی به استفاده از .collectLatest در Flow<PagingData> نیست، هرچند هنوز توصیه می‌شود این کار را انجام دهید.
  • ‫PagingSource.LoadResult.Invalid به‌عنوان نوع برگشتی جدید از PagingSource.load اضافه شده است که باعث می‌شود «صفحه‌بندی» همه درخواست‌های بار معلقه یا آتی را برای این PagingSource کنار بگذارد و آن را نامعتبر کند. این نوع برگشتی برای مدیریت داده‌های احتمالاً نامعتبر یا قدیمی طراحی شده است که می‌تواند از پایگاه داده یا شبکه برگردانده شود.
  • ‫.onPagesPresented و .addOnPagesUpdatedListener API ارائه‌دهنده اضافه شد که به‌صورت هم‌زمان با ارائه صفحه‌ها در رابط کاربری راه‌اندازی می‌شوند. به‌روزرسانی‌های صفحه می‌تواند در سناریوهای زیر اتفاق بیفتد:
    • بار اولیه نسل جدید PagingData تکمیل می‌شود، صرف‌نظر از اینکه نسل جدید حاوی تغییراتی در موارد ارائه‌شده باشد یا نه. یعنی، نسل جدیدی که بار اولیه را بدون به‌روزرسانی تکمیل می‌کند، زیرا فهرست دقیقاً یکسان است، همچنان این برگشت تماس را راه‌اندازی خواهد کرد.
    • صفحه‌ای درج می‌شود، حتی اگر صفحه درج‌شده حاوی هیچ مورد جدیدی نباشد.
    • صفحه‌ای رها می‌شود، حتی اگر صفحه رهاشده خالی باشد.

نسخه 3.1.0-rc01

۳ نوامبر ۲۰۲۱

‫androidx.paging:paging-*:3.1.0-rc01 منتشر شد. نسخه 3.1.0-rc01 شامل این تعهدات است.

رفع اشکال‌ها

  • شرایط رقابتی + نشت حافظه در .cachedIn() در مواردی که چندین رویداد بارگیری توسط Paging downstream ارسال می‌شد درحالی‌که هیچ ناظری وجود نداشت یا بین زمانی که ناظر درحال جابه‌جایی به PagingData جدید بود برطرف شد. (Ib682e)

نسخه 3.1.0-beta01

‫۱۳ اکتبر ۲۰۲۱

‫androidx.paging:paging-*:3.1.0-beta01 منتشر شد. نسخه 3.1.0-beta01 حاوی این commit-ها است.

رفع اشکال‌ها

  • رفع مشکلی که در آن دسترسی‌های سریع به موارد متعدد می‌توانست باعث شود این موارد برای درنظر گرفته شدن در prefetchDistance حذف شوند و درنتیجه بار کردن صفحه متوقف شود. این امر به‌ویژه زمانی مشکل‌ساز می‌شود که تعداد زیادی عنصر به‌طور هم‌زمان در چیدمانی قرار بگیرند که بار کردن را در جهت مخالف پیمایش کاربر در اولویت قرار دهد. این دسترسی‌های مورد اکنون بافر شده‌اند و به‌طور هم‌زمان اولویت‌بندی شده‌اند تا از حذف شدن آن‌ها جلوگیری شود. (aosp/1833273)

نسخه 3.1.0-alpha04

‫۲۹ سپتامبر ۲۰۲۱

‫androidx.paging:paging-*:3.1.0-alpha04 منتشر شد. نسخه 3.1.0-alpha04 حاوی این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • میاناهای برنامه‌سازی کاربردی Flow<PagingData>.observable و Flow<PagingData>.flowable دیگر آزمایشی نیستند. (Ie0bdd)

رفع اشکال‌ها

  • برای LoadStates،‏ endOfPaginationReached اکنون همیشه false برای LoadType.REFRESH است. قبلاً ممکن بود endOfPaginationReached برای RemoteMediator REFRESH true باشد، اما نه برای PagingSource. این رفتار اکنون ادغام شده است تا همیشه false را برگرداند زیرا هرگز منطقی نیست که REFRESH پایانی باشد، و اکنون به‌عنوان بخشی از قرارداد میانای برنامه‌سازی کاربردی در LoadStates مستند شده است. هنگام تصمیم‌گیری درباره اینکه آیا صفحه‌بندی خاتمه یافته است، همیشه باید این کار را با توجه به جهت‌های APPEND یا PREPEND انجام دهید. (I047b6)
  • ‫LoadStates از Paging اکنون قبل‌از انتشار پایین‌دست بین نسل‌ها، منتظر مقادیر معتبر از هر دو PagingSource و RemoteMediator می‌ماند. این کار از ارسال NotLoading در CombinedLoadStates.source.refresh توسط نسل‌های جدید PagingData جلوگیری می‌کند، اگر قبلاً Loading بوده باشد؛ نسل‌های جدید PagingData اکنون همیشه به‌درستی با Loading برای وضعیت بازآوری شروع می‌شوند، به‌جای اینکه ابتدا در برخی موارد به‌اشتباه به NotLoading بازنشانی شوند.

    لغو تولیدات گذشته اکنون با مشتاقی درصورت نامعتبر شدن / تولیدات جدید انجام می‌شود. دیگر نباید لازم باشد از collectLatest .در Flow<PagingData> استفاده شود، هرچند هنوز هم به‌شدت توصیه می‌شود این کار انجام شود. (I0b2b5، b/177351336، b/195028524)

  • ‫.loadStateFlow و .addLoadStateListener در «میاناهای برنامه‌سازی کاربردی» ارائه‌دهنده دیگر CombinedLoadStates اولیه را که همیشه وضعیت‌های میانجی آن روی null و وضعیت‌های منبع آن روی NotLoading(endOfPaginationReached = false) تنظیم شده است به‌صورت اضافی ارسال نمی‌کنند. این یعنی:

    1. اگر از RemoteMediator استفاده کنید، حالت‌های میانجی همیشه پر می‌شوند.
    2. ثبت شنودگر loadState جدید یا جمع‌کننده جدید در .loadStateFlow دیگر بلافاصله مقدار فعلی را منتشر نخواهد کرد اگر CombinedLoadStates واقعی از PagingData دریافت نکرده باشد. این اتفاق می‌تواند زمانی رخ دهد که یک جمع‌آورنده یا شنونده قبل‌از ارسال PagingData شروع به کار کند. (I1a748)

نسخه 3.1.0-alpha03

۲۱ ژوئیه ۲۰۲۱

‫androidx.paging:paging-*:3.1.0-alpha03 منتشر شد. نسخه 3.1.0-alpha03 حاوی این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • نوع پاسخ LoadResult سوم LoadResult.Invalid به PagingSource اضافه شده است. وقتی PagingSource.load مقدار LoadResult.Invalid را برمی‌گرداند، صفحه‌بندی داده‌های بارشده را دور می‌اندازد و PagingSource را نامعتبر می‌کند. این نوع برگشتی برای مدیریت داده‌های احتمالاً نامعتبر یا قدیمی طراحی شده است که می‌تواند از پایگاه داده یا شبکه برگردانده شود.

    برای مثال، اگر پایگاه داده زیرین نوشته شود اما PagingSource به‌موقع نامعتبر نشود، ممکن است نتایج ناسازگاری برگرداند اگر پیاده‌سازی آن به تغییرناپذیری مجموعه داده پشتیبان که از آن بارگیری می‌کند بستگی داشته باشد (مثلاً پیاده‌سازی‌های پایگاه داده به سبک LIMIT OFFSET). در این سناریو، توصیه می‌شود پس‌از بار کردن، نامعتبر بودن را بررسی کنید و LoadResult.Invalid را برگردانید که باعث می‌شود «صفحه‌بندی» هرگونه درخواست بار کردن معلق یا آتی را برای این PagingSource نادیده بگیرد و آن را نامعتبر کند.

    این نوع برگشتی همچنین توسط Paging2 API که از LivePagedList یا RxPagedList استفاده می‌کند پشتیبانی می‌شود. When using a PagingSource with Paging2's PagedList APIs, the PagedList is immediately detached, stopping further attempts to load data on this PagedList and triggers invalidation on the PagingSource.

    LoadResult یک کلاس مهروموم‌شده است، به این معنی که این یک تغییر ناسازگار با منبع است به‌طوری‌که موارد استفاده‌ای که مستقیماً از نتایج PagingSource.load استفاده می‌کنند باید LoadResult.Invalid را در زمان ترجمه مدیریت کنند. برای مثال، کاربران Kotlin که از exhaustive-when برای بررسی نوع پاسخ استفاده می‌کنند باید بررسی نوع «نامعتبر» را اضافه کنند. (Id6bd3،‏ b/191806126،‏ b/192013267)

رفع اشکال‌ها

  • فراخوان‌های برگشتی نامعتبرسازی که ازطریق PagingSource.registerInvalidatedCallback یا DataSource.addInvalidatedCallback اضافه شده‌اند، اکنون اگر در PagingSource / DataSource که قبلاً نامعتبر بوده است ثبت شده باشند، به‌طور خودکار راه‌اندازی می‌شوند. این مشکل مربوط به وضعیت مسابقه‌ای است که باعث می‌شد «صفحه‌بندی» نشان‌های نامعتبر را حذف کند و وقتی «منبعی» به آن ارائه می‌شد که ازقبل درطول بار اولیه نامعتبر بود، گیر کند. به‌علاوه، فراخوانی‌های برگشتی نامعتبر اکنون پس‌از فعال شدن به‌درستی برداشته می‌شوند زیرا تضمین می‌شود که حداکثر یک بار فراخوانی شوند. (I27e69)
  • ارسال مقدار اولیه جای‌بان (InitialPagedList) از جاری‌سازی PagedList که به‌تازگی نمونه‌سازی شده است، برای نمونه، LivePagedListBuilder یا RxPagedListBuilder، دیگر داده‌های بارشده قبلی را پاک نخواهد کرد.

نسخه 3.1.0-alpha02

۱ ژوئیه ۲۰۲۱

‫androidx.paging:paging-*:3.1.0-alpha02 منتشر شد. نسخه 3.1.0-alpha02 حاوی این ارسال‌ها است.

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

  • افزودن APIهای ارائه‌دهنده جریان و شنونده onPagesPresented که بلافاصله پس‌از به‌روزرسانی صفحه‌های ارائه‌شده در میانای کاربر راه‌اندازی می‌شوند.

    ازآنجایی‌که این به‌روزرسانی‌ها با واسط کاربر همگام هستند، می‌توانید روش‌های آداپتور را فراخوانی کنید مانند .snapshot، .getItemCount، تا وضعیت را پس‌از اعمال به‌روزرسانی بررسی کنید. توجه داشته باشید که .snapshot()‎ برای فراخوانی صریح باقی مانده است زیرا انجام آن در هر به‌روزرسانی می‌تواند پرهزینه باشد.

    به‌روزرسانی صفحه می‌تواند در سناریوهای زیر اتفاق بیفتد:

    • بارگیری اولیه نسل جدیدی از PagingData تکمیل می‌شود، صرف‌نظر از اینکه نسل جدید حاوی تغییراتی در موارد ارائه‌شده باشد یا نه. یعنی، نسل جدیدی که بارگیری اولیه را تکمیل می‌کند بدون هیچ به‌روزرسانی‌ای، چون فهرست دقیقاً یکسان است، همچنان این فراخوانی برگشتی را راه‌اندازی خواهد کرد.
    • صفحه‌ای درج می‌شود، حتی اگر صفحه درج‌شده حاوی هیچ مورد جدیدی نباشد
    • صفحه‌ای حذف می‌شود، حتی اگر صفحه حذف‌شده خالی باشد (I272c9، b/189999634)

رفع اشکال‌ها

  • دسترسی به PagedList.dataSource از مقدار اولیه تولیدشده توسط LivePagedList یا RxPagedList دیگر به‌اشتباه IllegalStateException را ایجاد نمی‌کند (I96707)

نسخه 3.1.0-alpha01

‫۲ ژوئن ۲۰۲۱

‫androidx.paging:paging-*:3.1.0-alpha01 منتشر شد. نسخه 3.1.0-alpha01 حاوی این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • کلاس‌های ارائه‌شده توسط paging-rxjava3 اکنون تحت بسته androidx.paging.rxjava3 قرار دارند تا با paging-rxjava2 تداخل نداشته باشند (Ifa7f6)

رفع اشکال‌ها

  • مشکلی برطرف شد که در آن «صفحه‌بندی» گاهی اوقات رویدادهای differ بدون عملیات را به RecyclerView ارسال می‌کرد، که می‌توانست باعث شود برخی شنوندگان زودتر فعال شوند. (Ic507f، b/182510751)

همیاری خارجی

  • میاناهای برنامه‌سازی کاربردی سازگار PagedList منسوخ‌شده به آرتیفکت rxjava3 اضافه شد (Id1ce2، b/182497591)

نسخه ۱.۰.۰ «صفحه‌بندی Compose»

نسخه 1.0.0-alpha20

۲۴ مه ۲۰۲۳

‫androidx.paging:paging-compose:1.0.0-alpha20 منتشر شد. نسخه 1.0.0-alpha20 حاوی این commit-ها است.

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

  • «صفحه‌بندی نوشتن» اکنون از پیش‌نمایش فهرست داده‌های جعلی با ایجاد PagingData.from(fakeData) و پیچیدن آن PagingData در MutableStateFlow (برای نمونه، MutableStateFlow(PagingData.from(listOf(1, 2, 3)))) پشتیبانی می‌کند. بااستفاده از آن داده‌ها به‌عنوان ورودی در @Preview، فراخوانی‌های collectAsLazyPagingItems() LazyPagingItems پیش‌نمایش‌شدنی ارائه می‌دهد. (I8a78d، b/194544557)

رفع اشکال‌ها

  • داده‌های ذخیره‌شده در حافظه نهان از pager.flow.cachedIn که در LazyPagingItems جمع‌آوری شده است، اکنون بلافاصله پس‌از بازیابی وضعیت، بدون نیاز به جمع‌آوری ناهمگام، دردسترس خواهد بود. این یعنی داده‌های ذخیره‌شده در حافظه نهان بلافاصله پس‌از ترکیب‌بندی اولیه بعداز بازیابی وضعیت برای ارائه آماده خواهند بود. (I97a60، b/177245496)

نسخه 1.0.0-alpha19

۳ مه ۲۰۲۳

‫androidx.paging:paging-compose:1.0.0-alpha19 منتشر شد. نسخه 1.0.0-alpha19 شامل این تعهدات است.

پشتیبانی از همه چیدمان‌های تنبل

قبلاً، Paging Compose افزونه‌های سفارشی items و itemsIndexed را در LazyListScope ارائه می‌کرد، به این معنی که نمی‌توانستید از Paging Compose با سایر چیدمان‌های تنبل مانند LazyVerticalGrid، HorizontalPager، یا سایر مؤلفه‌های تنبل سفارشی ارائه‌شده توسط کتابخانه‌های Wear و TV استفاده کنید. رسیدگی به این عدم انعطاف‌پذیری به‌روزرسانی اصلی این نسخه است.

برای پشتیبانی از چیدمان‌های تنبل بیشتر، باید در لایه‌ای متفاوت میانای برنامه‌سازی کاربردی می‌ساختیم - به‌جای ارائه میانای برنامه‌سازی کاربردی items سفارشی برای هر چیدمان تنبل، «صفحه‌بندی Compose» اکنون روش‌های افزونه سطح پایین‌تری را در LazyPagingItems در itemKey و itemContentType ارائه می‌دهد. این میاناهای برنامه‌سازی کاربردی بر کمک به شما در پیاده‌سازی پارامترهای key و contentType در میاناهای برنامه‌سازی کاربردی استاندارد items که ازقبل برای LazyColumn، LazyVerticalGrid و همچنین معادل‌های آن‌ها در میاناهای برنامه‌سازی کاربردی مانند HorizontalPager وجود دارند، تمرکز دارند. (Ifa13b، Ib04f0، b/259385813)

این یعنی پشتیبانی از LazyVerticalGrid به این صورت خواهد بود:

// This part is unchanged
val lazyPagingItems = pager.collectAsLazyPagingItems()

LazyVerticalGrid(columns = GridCells.Fixed(2)) {
  // Here we use the standard items API
  items(
    count = lazyPagingItems.itemCount,
    // Here we use the new itemKey extension on LazyPagingItems to
    // handle placeholders automatically, ensuring you only need to provide
    // keys for real items
    key = lazyPagingItems.itemKey { it.uniqueId },
    // Similarly, itemContentType lets you set a custom content type for each item
    contentType = lazyPagingItems.itemContentType { "contentType" }
  ) { index ->
    // As the standard items call provides only the index, we get the item
    // directly from our lazyPagingItems
    val item = lazyPagingItems[index]
    PagingItem(item = item)
  }
}

برای مثال‌های بیشتر درباره استفاده از این میاناهای برنامه‌سازی کاربردی جدید، لطفاً نمونه‌های ما را ببینید.

اگرچه این تغییرات باعث می‌شود مثال‌های LazyColumn و LazyRow چند خط طولانی‌تر شوند، اما احساس کردیم که یکپارچگی در همه چیدمان‌های تنبل عامل مهمی برای کسانی است که از «صفحه‌بندی» در «ترکیب» استفاده می‌کنند. به همین دلیل، افزونه‌های موجود برای LazyListScope اکنون منسوخ شده‌اند. (I0c459, I92c8f, b/276989796)

تغییرات میانای برنامه‌سازی کاربردی

  • برای تسهیل انتقال به میاناهای برنامه‌سازی کاربردی جدید، توابع افزونه items و itemsIndexed در LazyListScope اکنون از پارامتر contentType پشتیبانی می‌کنند که منعکس‌کننده پشتیبانی در میاناهای برنامه‌سازی کاربردی جدید است. (Ib1918، b/255283378)

به‌روزرسانی‌های وابستگی

  • Paging Compose وابستگی خود را از Compose 1.0.5 به Compose 1.2.1 به‌روز کرده است. (Ib1918، b/255283378)

نسخه 1.0.0-alpha18

۸ فوریه ۲۰۲۳

androidx.paging:paging-compose:1.0.0-alpha18 بدون تغییر منتشر شد. نسخه 1.0.0-alpha18 حاوی این commit-ها است.

نسخه 1.0.0-alpha17

‫۲۴ اکتبر ۲۰۲۲

‫androidx.paging:paging-compose:1.0.0-alpha17 منتشر شد. نسخه 1.0.0-alpha17 شامل این تعهدات است.

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

  • هنگام تماس با collectLazyPagingItems، از CoroutineContext سفارشی پشتیبانی شود. (I7a574،‏ b/243182795،‏ b/233783862)

نسخه 1.0.0-alpha16

‫۱۰ اوت ۲۰۲۲

‫androidx.paging:paging-compose:1.0.0-alpha16 منتشر شد. نسخه 1.0.0-alpha16 حاوی این commit-ها است.

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

  • اکنون «صفحه‌بندی» ازطریق کلاس LazyPagingItems گزارش‌هایی ارائه می‌دهد تا اطلاعات اشکال‌زدایی جمع‌آوری‌شده از PagingData را آشکار کند.
  • گزارش‌ها را می‌توان ازطریق فرمان adb shell adb shell setprop log.tag.Paging [DEBUG|VERBOSE] فعال کرد. ([b/235527159}(https://issuetracker.google.com/issues/235527159))

رفع اشکال‌ها

  • خطای سازنده PagingDataDiffer که هنگام استفاده از paging-compose:1.0.0-alpha15 با paging-common:3.1.1 یا نسخه‌های قدیمی‌تر وجود داشت برطرف شد.(b/235256201،b/239868768)

نسخه 1.0.0-alpha15

‫۱ ژوئن ۲۰۲۲

‫androidx.paging:paging-compose:1.0.0-alpha15 منتشر شد. نسخه 1.0.0-alpha15 شامل این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • سازنده‌هایی برای PagingDataAdapter و AsyncPagingDataDiffer اضافه شده است که به‌جای CoroutineDispatcher، CoroutineContext را می‌پذیرند. (Idc878)

رفع اشکال‌ها

  • ‫LazyPagingItems اکنون loadState اولیه را تنظیم می‌کند تا LoadState.Loading بازآوری داشته باشد. (I55043، b/224855902)

نسخه 1.0.0-alpha14

‫۱۳ اکتبر ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha14 منتشر شد. نسخه 1.0.0-alpha14 شامل این تعهدات است.

نسخه 1.0.0-alpha13

‫۲۹ سپتامبر ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha13 منتشر شد. نسخه 1.0.0-alpha13 شامل این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • تابع LazyPagingItems.snapshot() با ویژگی LazyPagingItems.itemSnapshotList جایگزین شد (Ie2da8)
  • ‫LazyPagingItems.getAsState() منسوخ‌شده برداشته شد (Ie65e4)

نسخه 1.0.0-alpha12

‫۲۱ ژوئیه ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha12 منتشر شد. نسخه 1.0.0-alpha12 شامل این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫items(lazyPagingItems) و itemsIndexed(lazyPagingItems) که برای اتصال «صفحه‌بندی» با LazyColumn/Row استفاده می‌شوند اکنون پارامتر کلید گزینه را می‌پذیرند که به شما امکان می‌دهد کلید پایداری را که نشان‌دهنده مورد است مشخص کنید. در اینجا می‌توانید درباره کلیدها بیشتر بخوانید. (I7986d)
  • تابع lazyPagingItems.getAsState(index) اکنون منسوخ شده است. درعوض از lazyPagingItems[index] استفاده کنید. (I086cb، b/187339372)

نسخه 1.0.0-alpha11

۳۰ ژوئن ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha11 منتشر شد. نسخه 1.0.0-alpha11 شامل این تعهدات است.

نسخه 1.0.0-alpha10

۲ ژوئن ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha10 منتشر شد. نسخه 1.0.0-alpha10 حاوی این commit-ها است.

نسخه 1.0.0-alpha09

‫۱۸ مه ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha09 منتشر شد. نسخه 1.0.0-alpha09 حاوی این ارسال‌ها است.

رفع اشکال‌ها

  • ‫itemCount و item getter مربوط به LazyPagingItems اکنون قابل‌مشاهده هستند که امکان استفاده از آن را با LazyVerticalGrid نیز فراهم می‌کند (Ie2446،‏ b/171872064،‏ b/168285687)

سازگاری Compose

  • ‫androidx.paging:paging-compose:1.0.0-alpha09 فقط با Compose نسخه 1.0.0-beta07 و بالاتر سازگار است.

نسخه 1.0.0-alpha08

۲۴ فوریه ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha08 منتشر شد. نسخه 1.0.0-alpha08 شامل این commit-ها است.

برای ادغام با Compose 1.0.0-beta01 به‌روز شد.

نسخه 1.0.0-alpha07

‫۱۰ فوریه ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha07 منتشر شد. نسخه 1.0.0-alpha07 حاوی این تعهدات است.

برای ادغام با Compose alpha12 به‌روز شد.

نسخه 1.0.0-alpha06

‫۲۸ ژانویه ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha06 منتشر شد. نسخه 1.0.0-alpha06 شامل این تعهدات است.

رفع اشکال‌ها

به‌روزرسانی شد تا به Compose 1.0.0-alpha11 وابسته باشد.

نسخه 1.0.0-alpha05

‫۱۳ ژانویه ۲۰۲۱

‫androidx.paging:paging-compose:1.0.0-alpha05 منتشر شد. نسخه 1.0.0-alpha05 شامل این commit-ها است.

به‌روزرسانی شد تا به Compose 1.0.0-alpha10 وابسته باشد.

نسخه 1.0.0-alpha04

‫۱۶ دسامبر ۲۰۲۰

‫androidx.paging:paging-compose:1.0.0-alpha04 منتشر شد. نسخه 1.0.0-alpha04 شامل این تعهدات است.

رفع اشکال‌ها

  • ویژگی‌های سهولت، CombinedLoadStates.refresh، CombinedLoadStates.prepend، CombinedLoadStates.append به‌روزرسانی شد تا فقط از Loading به NotLoading گذار کند پس‌از اینکه هر دو وضعیت بارگذاری میانجی و منبع NotLoading باشند تا اطمینان حاصل شود که به‌روزرسانی از دور اعمال شده است. (I65619)

نسخه 1.0.0-alpha03

‫۲ دسامبر ۲۰۲۰

‫androidx.paging:paging-compose:1.0.0-alpha03 منتشر شد. نسخه 1.0.0-alpha03 حاوی این commit-ها است.

  • به‌روزرسانی شد تا با Compose 1.0.0-alpha08 مطابقت داشته باشد.

نسخه 1.0.0-alpha02

۱۱ نوامبر ۲۰۲۰

‫androidx.paging:paging-compose:1.0.0-alpha02 منتشر شد. نسخه 1.0.0-alpha02 حاوی این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • روش‌های .peek()،‏ .snapshot()،‏ .retry()، و .refresh() به LazyPagingItem اضافه شد که همان عملکرد موجود در AsyncPagingDataDiffer / PagingDataAdapter را نشان می‌دهد (Iddfe8،‏ b/172041660)

نسخه 1.0.0-alpha01

‫۲۸ اکتبر ۲۰۲۰

‫androidx.paging:paging-compose:1.0.0-alpha01 منتشر شد. نسخه 1.0.0-alpha01 شامل این تعهدات است.

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

ساخته paging-compose یکپارچه‌سازی بین کتابخانه صفحه‌بندی و Jetpack Compose را فراهم می‌کند. نمونه استفاده ساده:

  @Composable
  @OptIn(ExperimentalLazyDsl::class)
  fun ItemsDemo(flow: Flow<PagingData<String>>) {
      val lazyPagingItems = flow.collectAsLazyPagingItems()
      LazyColumn {
          items(lazyPagingItems) {
              Text("Item is $it")
          }
      }
  }

نسخه ۳.۰.۱

نسخه ۳.۰.۱

‫۲۱ ژوئیه ۲۰۲۱

‫androidx.paging:paging-*:3.0.1 منتشر شد. نسخه ۳.۰.۱ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • دسترسی به PagedList.dataSource از مقدار اولیه تولیدشده توسط LivePagedList یا RxPagedList دیگر به‌اشتباه IllegalStateException را ایجاد نخواهد کرد (I96707)

نسخه ۳.۰.۰

نسخه ۳.۰.۰

۵ مه ۲۰۲۱

‫androidx.paging:paging-*:3.0.0 منتشر شد. نسخه ۳.۰.۰ حاوی این ثبت‌ها است.

ویژگی‌های اصلی نسخه 3.0.0

اکثر API موجود از Paging 2.x.x به‌نفع API جدید Paging 3 منسوخ شده است تا بهبودهای زیر را به‌همراه داشته باشد:

  • پشتیبانی درجه یک برای روال‌های مشترک Kotlin و Flow
  • پشتیبانی برای لغو
  • نشان‌های خطای و وضعیت بار داخلی
  • عملکرد امتحان مجدد + بازآوری
  • هر سه زیرکلاس DataSource در یک کلاس واحد PagingSource ترکیب شده‌اند
  • تبدیل‌های صفحه سفارشی ازجمله تبدیل داخلی برای افزودن جداکننده‌ها
  • درحال بار کردن سرصفحه‌ها و پانویس‌های وضعیت

نسخه 3.0.0-rc01

‫۲۱ آوریل ۲۰۲۱

‫androidx.paging:paging-*:3.0.0-rc01 منتشر شد. نسخه 3.0.0-rc01 شامل این تعهدات است.

رفع اشکال‌ها

  • رفع مشکلی که در آن «صفحه‌بندی» گاهی اوقات رویدادهای بدون عملیات متفاوت را به RecyclerView ارسال می‌کرد که می‌توانست باعث شود برخی‌از شنوندگان زودتر از موعد راه‌اندازی شوند. (Ic507f، b/182510751)

نسخه 3.0.0-beta03

۲۴ مارس ۲۰۲۱

‫androidx.paging:paging-*:3.0.0-beta03 منتشر شد. نسخه ۳.۰.۰-beta03 شامل این تعهدات است.

رفع اشکال‌ها

  • نحوه مدیریت جای‌بان‌ها را هنگام بارگیری مجدد فهرست بازطراحی کرده‌ایم تا از پرش‌های غیرمنتظره در RecyclerView جلوگیری کنیم. برای جزئیات، NullPaddedDiffing.md را ببینید. (If1490، b/170027529، b/177338149)
  • سازندگان مختلف PagedList (مسیر سازگاری قدیمی) دیگر به‌طور نادرست و هم‌زمان DataSource.Factory.create() را در رشته اصلی هنگام فراخوانی .build() فراخوانی نمی‌کنند. (b/182798948)

نسخه 3.0.0-beta02

‫۱۰ مارس ۲۰۲۱

‫androidx.paging:paging-*:3.0.0-beta02 منتشر شد. نسخه 3.0.0-beta02 شامل این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • افزونه‌های Rx3 اکنون به‌درستی @ExperimentalCoroutinesApi الزام «موافقت» را منتشر می‌کنند. قبلاً در روش @get علامت‌گذاری می‌شدند که به‌دلیل موارد زیر توسط «گردآورنده Kotlin» نادیده گرفته می‌شود: https://youtrack.jetbrains.com/issue/KT-45227 (I5733c)

رفع اشکال‌ها

  • Enforce restrictions on public usage of experimental APIs (I6aa29, b/174531520)
  • اشکالی که باعث می‌شد PagingState همیشه null باشد وقتی بازآوری از دور فراخوانده می‌شود برطرف شد.
  • اشکالی برطرف شد که در آن صفحه‌های خالی برگردانده‌شده توسط PagingSource می‌توانست از واکشی مجدد Paging برای برآورده کردن prefetchDistance جلوگیری کند و باعث شود Paging «گیر کند».

نسخه 3.0.0-beta01

۱۰ فوریه ۲۰۲۱

‫androidx.paging:paging-*:3.0.0-beta01 منتشر شد. نسخه 3.0.0-beta01 حاوی این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • پیچ‌های Rx2 و Rx3 اکنون حاشیه‌نویسی آزمایشی را که به آن وابسته است نمایان می‌کنند. اگر از پوشاننده‌های سازگار Rx در paging-rxjava2 یا paging-rxjava3 استفاده می‌کنید، اکنون باید موارد استفاده را با @OptIn(ExperimentalCoroutinesApi::class) حاشیه‌نویسی کنید (Ib1f9d)

رفع اشکال‌ها

  • رفع خطای IndexOutOfBoundsException: Inconsistency detected که گاهی هنگام استفاده از «میاناهای برنامه‌سازی کاربردی» نسخه ۲ DataSource ازطریق مسیرهای سازگاری رخ می‌داد
  • اکنون تماس isInvalid درطول مقداردهی اولیه DataSource هنگام استفاده ازطریق مسیرهای سازگاری به‌جای رشته اصلی، به‌درستی در fetchDispatcher راه‌اندازی می‌شود. این کار IllegalStateException ناشی از دسترسی Db در رشته اصلی را هنگام استفاده از پیاده‌سازی PagingSource Room برطرف می‌کند.

نسخه 3.0.0-alpha13

‫۲۷ ژانویه ۲۰۲۱

‫androidx.paging:paging-*:3.0.0-alpha13 منتشر شد. نسخه 3.0.0-alpha13 شامل این ارسال‌ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • پیاده‌سازی PagingSource.getRefreshKey دیگر اختیاری نیست، اکنون تابعی انتزاعی بدون پیاده‌سازی پیش‌فرض است. کاربران درحال انتقال می‌توانند به برگرداندن پیاده‌سازی پیش‌فرض ادامه دهند، که به‌سادگی null را برمی‌گرداند، اما getRefreshKey() باید پیاده‌سازی واقعی داشته باشد که کلیدی را براساس موقعیت پیمایش فعلی کاربر برمی‌گرداند که به «صفحه‌بندی» اجازه می‌دهد به بار کردن ادامه دهد و درصورت امکان ازطریق PagingState.anchorPosition در اطراف نمای دید متمرکز شود. (I4339a)
  • ‫InvalidatingPagingSourceFactory اکنون کلاس نهایی است (Ia3b0a)
  • اجازه می‌دهد رفتار جداکننده پایانه (سرایند / پانویس) با پارامتر اختیاری اضافی SeparatorType پیکربندی شود. دو گزینه عبارت‌اند از:
    • FULLY_COMPLETE - رفتار موجود؛ قبل‌از افزودن جداکننده‌های پایانه، منتظر بمانید تا PagingSource و RemoteMediator هر دو endOfPaginationReached را علامت‌گذاری کنند. اگر از RemoteMediator استفاده نشود، remote loadState نادیده گرفته می‌شود. این ویژگی عمدتاً زمانی مفید است که بخواهید جداکننده‌های بخش را فقط زمانی نشان دهید که بخش به‌طور کامل بار شده باشد، ازجمله واکشی از منبع راه دور، مثلاً شبکه.
    • SOURCE_COMPLETE - only wait for PagingSource to mark endOfPaginationReached even if RemoteMediator is used. این کار باعث می‌شود سرصفحه‌ها و پاصفحه‌ها به‌طور هم‌زمان با بارگیری اولیه ارائه شوند، که مانع از نیاز کاربران به پیمایش برای دیدن جداکننده‌های پایانی می‌شود. (Ibe993، b/174700218)

رفع اشکال‌ها

  • نشت حافظه نادری که وقتی PagingSource قبل‌از اینکه PageFetcher بتواند بار کردن از آن را شروع کند نامعتبر می‌شود اتفاق می‌افتد برطرف شد. (I9606b،‏ b/174625633)

نسخه 3.0.0-alpha12

‫۱۳ ژانویه ۲۰۲۱

‫androidx.paging:paging-*:3.0.0-alpha12 منتشر شد. نسخه ۳.۰.۰-alpha12 حاوی این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫InvalidatingPagingSourceFactory دیگر کلاس انتزاعی نیست زیرا هرگز روش انتزاعی نداشته است. (I4a8c4)
  • برای کاربران Java، سربارگذاری ‎ .cachedIn()‎ اضافه شد که ViewModel را به‌جای Lifecycle یا CoroutineScope می‌پذیرد. (I97d81،‏ b/175332619)
  • به تماس‌گیرندگان جاوا اجازه می‌دهد تا با پذیرفتن Executor در آرگومان‌های عملگر تبدیل، از عملیات تبدیل PagingData به‌صورت ناهمگام استفاده کنند. اکنون پسوند -Sync از همه عامل‌های تبدیل -Sync برداشته شده است و کاربران Kotlin Coroutine باید با فراخواندن تابع افزونه‌ای که به‌جای آن یک بلوک تعلیق را می‌پذیرد، ابهام‌زدایی کنند. همه عملگرهای تبدیل PagingData به افزونه‌ها در کلاس استاتیک PagingDataTransforms منتقل شده‌اند. کاربران Java باید آن‌ها را ازطریق کمک‌کننده‌های ایستا فراخوانی کنند، مثلاً PagingDataTransforms.map(pagingData, transform) برای کاربران Kotlin، نحو یکسان است اما باید تابع را وارد کنید. (If6885، b/172895919)

رفع اشکال‌ها

  • اشکالی که باعث می‌شد اگر قبلاً به انتهای صفحه‌بندی رسیده باشید، RemoteMediator.load() درطول adapter.refresh() فراخوانی نشود برطرف شد.

نسخه 3.0.0-alpha11

‫۱۶ دسامبر ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha11 منتشر شد. نسخه ۳.۰.۰-alpha11 حاوی این تعهدات است.

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

  • پشتیبانی از وضعیت ذخیره‌شده برای موارد استفاده پایه زیر اضافه شد (پشتیبانی کامل، به‌ویژه در مورد منبع لایه‌ای، هنوز درحال توسعه است):
    • جریان در حافظه نهان ذخیره می‌شود و برنامه بسته نمی‌شود (برای نمونه، جریان در مدل نما در حافظه نهان ذخیره می‌شود و فعالیت در فرایند بازآفرینی می‌شود)
    • منبع صفحه‌بندی شمارش می‌شود، جای‌بان‌ها فعال هستند، و چیدمان نامنظم نیست.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫PagingSource.getRefreshKey() اکنون میانای برنامه‌سازی کاربردی پایدار است (I22f6f، b/173530980)
  • ‫PagingSource.invalidate دیگر تابع باز نیست. اگر لازم است هنگام وقوع ابطال مطلع شوید، به‌جای لغو invalidate، فراخوانی روش registerInvalidatedCallback را درنظر بگیرید. (I628d9، b/173029013، b/137971356)
  • اکنون Pager به‌جای اینکه ازطریق گزینش شرح، میاناهای برنامه‌سازی کاربردی آزمایشی را به میانای برنامه‌سازی کاربردی عمومی غیرآزمایشی نشت دهد، یک سازنده آزمایشی در کنار سازنده‌های معمولی خود دارد. (I9dc61، b/174531520)
  • ویژگی‌های راحتی، CombinedLoadStates.refresh، CombinedLoadStates.prepend، CombinedLoadStates.append به‌روز شد تا فقط از Loading به NotLoading منتقل شود پس‌از اینکه هر دو حالت بارگیری میانجی و منبع NotLoading شد تا اطمینان حاصل شود به‌روزرسانی ازراه‌دور اعمال شده است. (I65619)
  • LoadParams.pageSize برداشته شده است (قبلاً منسوخ شده بود). توصیه می‌شود از LoadParams.loadSize در PagingSource خود استفاده کنید.

    LoadParams.loadSize همیشه برابر با PagingConfig.pageSize است، به‌جز برای تماس بارگیری اولیه که برابر با PagingConfig.initialLoadSize است.

    اگر «منبع داده» Paging2 را بدون استفاده از «صفحه‌بندی» یا PagedList آزمایش می‌کنید، pageSize ممکن است با PagingConfig.pageSize مطابقت نداشته باشد اگر initialLoadSize را نیز تنظیم کرده باشید. اگر برای آزمایش‌هایتان مهم است، به‌جای آن از Pager/PagedList استفاده کنید که به‌صورت داخلی PageSize صحیح را برای روش‌های بار کردن DataSource تنظیم می‌کند. (I98ac7،‏ b/149157296)

رفع اشکال‌ها

  • خرابی ناشی از IllegalStateException هنگام استفاده از جداکننده‌ها با تنظیم PagingConfig.maxSize برطرف شد. (I0ed33، b/174787528)
  • اشکالی که باعث می‌شد وضعیت بارگیری برای PREPEND / APPEND بلافاصله پس‌از بارگیری اولیه درصورت تنظیم RemoteMediator به NotLoading(endOfPaginationReached = true) به‌روز نشود برطرف شد (I8cf5a)
  • اشکالی برطرف شد که در آن میاناهای برنامه‌سازی کاربردی طرف ارائه‌دهنده مثل .snapshot()، .peek()، و غیره، فهرست قبلی (قدیمی) را در به‌روزرسانی‌های ListUpdateCallback برمی‌گرداندند.
  • اشکالی که باعث می‌شد اپراتورهای Separators هنگام استفاده با RemoteMediator سرصفحه یا پاصفحه اضافه نکنند برطرف شد
  • اشکالی برطرف شد که در آن به‌روزرسانی‌های LoadState به NotLoading برای RemoteMediator در وضعیت Loading گیر می‌کرد
  • اشکالی برطرف شد که در آن میانای برنامه‌سازی کاربردی سازگاری Paging2.0،‏ .asPagingSourceFactory()، می‌توانست باعث شود DataSource پشتیبان در CoroutineDispatcher نادرست مقداردهی اولیه شود. این کار باعث رفع خرابی و موارد احتمالی ANR می‌شود، به‌ویژه هنگام استفاده از پیاده‌سازی فعلی Room از PagingSource که از این مسیر سازگاری استفاده می‌کند.

نسخه 3.0.0-alpha10

‫۲ دسامبر ۲۰۲۰ (۱۲ آذر ۱۳۹۹)

‫androidx.paging:paging-*:3.0.0-alpha10 منتشر شد. نسخه 3.0.0-alpha10 حاوی این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • میاناهای برنامه‌سازی کاربردی منسوخ‌شده dataRefreshFlow و dataRefreshListener برداشته شده‌اند چون با به‌روزرسانی‌های loadStateFlow / Listener زائد هستند. برای کسانی که درحال انتقال هستند، معادل loadStateFlow عبارت است از:

    loadStateFlow.distinctUntilChangedBy { it.refresh }
        .filter { it.refresh is NotLoading }
    

    (Ib5570، b/173530908)

رفع اشکال‌ها

  • ‫endOfPaginationReached برای RemoteMediator REFRESH اکنون به‌درستی به به‌روزرسانی‌های LoadState منتقل می‌شود و از راه‌اندازی APPEND و PREPEND از راه دور جلوگیری می‌کند. (I94a3f، b/155290248)
  • ارائه فهرست خالی به‌دلیل خالی بودن صفحه اولیه یا فیلتر کردن سنگین دیگر مانع از شروع بارگیری‌های PREPEND یا APPEND توسط «صفحه‌بندی» نمی‌شود. (I3e702، b/168169730)
  • مشکلی که باعث می‌شد getRefreshKey در نسل‌های بعدی PagingSource هنگام وقوع سریع نامعتبرسازی‌ها فراخوانی نشود برطرف شد. (I45460، b/170027530)

همیاری خارجی

  • کلاس انتزاعی جدیدی به نام InvalidatingPagingSourceFactory اضافه شده است که دارای .invalidate() API است که نامعتبر کردن را به همه PagingSourceهایی که منتشر می‌کند ارسال می‌کند. با تشکر از @claraf3! (Ie71fc،‏ b/160716447)

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

  • Headers and footers from the .insertSeparators() transform may not appear immediately when using RemoteMediator b/172254056
  • اگر باطل کردن و PagingSource.load(LoadParams.Refresh(...)) قبل‌از بازگشت RemoteMediator.load() تکمیل شود، استفاده از RemoteMediator می‌تواند باعث گیر کردن LoadState از راه دور شود b/173717820

نسخه 3.0.0-alpha09

۱۱ نوامبر ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha09 منتشر شد. نسخه ۳.۰.۰-alpha09 حاوی این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • کاملاً منسوخ کردن روش‌های dataRefreshFlow / Listener با بند replaceWith. (I6e2dd)

رفع اشکال‌ها

  • رفع مشکل IllegalArgumentException که هنگام استفاده از جداکننده‌ها با RemoteMediator ایجاد می‌شد و زمانی که بارگیری ازراه‌دور که endOfPagination را برمی‌گرداند هنوز درحال اجرا بود، یک invalidate راه‌اندازی می‌شد (I3a260)

نسخه 3.0.0-alpha08

‫۲۸ اکتبر ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha08 منتشر شد. نسخه 3.0.0-alpha08 حاوی این commitها است.

تغییرات میانای برنامه‌سازی کاربردی

  • انواع Kotlin / Java مربوط به DataSource.InvalidatedCallback با فعال کردن تبدیل‌های SAM در Kotlin ازطریق میانای تابع (در Kotlin 1.4 دردسترس است) ترکیب شده‌اند. این کار همچنین اشکالی را برطرف می‌کند که در آن نوع kotlin از callbackهای نامعتبر پس‌از تبدیل توسط .map یا .mapByPage فراخوانی نمی‌شدند. (I1f244، b/165313046)

رفع اشکال‌ها

  • تعامل صفحه‌بندی با ViewPager به‌طور قابل‌توجهی بهبود یافته است. به‌طور دقیق، «صفحه‌بندی» دیگر تماس RemoteMediator#load را به‌دلیل نامعتبر شدن صفحه لغو نخواهد کرد. همچنین، اگر «بازآوری» لازم باشد، تا زمانی که درخواست «بازآوری» با موفقیت تکمیل نشود، دیگر درخواست بارگذاری الحاق/پیش‌الحاق ایجاد نخواهد کرد. (I6390b، b/162252536)
  • بررسی API lint برای MissingGetterMatchingBuilder برای androidx فعال شده است (I4bbea، b/138602561)
  • اشکالی برطرف شد که در آن دستیارهای .withLoadState* ConcatAdapter به‌دلیل اطلاع‌رسانی به RecyclerView از رشته پس‌زمینه ازکار می‌افتادند (I18bb5، b/170988309)
  • اشکالی برطرف شد که در آن بار کردن صفحه غیرخالی بسیار کوچک گاهی مانع از این می‌شد که پیش‌واکشی بار کردن‌ها را به‌درستی راه‌اندازی کند.Iffda3 b/169259468

نسخه 3.0.0-alpha07

۱ اکتبر ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha07 منتشر شد. نسخه 3.0.0-alpha07 حاوی این ارسال‌ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫Async PagingData Guava-based operators now accept an Executor as a param, to control execution context. (Id4372)

رفع اشکال‌ها

  • استثنای IndexOutOfBounds که در RemoteMediator به‌دلیل وضعیت مسابقه ایجاد می‌شد برطرف شد. (I00b7f، b/165821814)
  • شرایط رقابتی در تبدیل DataSource -> PagingSource که می‌توانست باعث شود PagingSource حاصل سیگنال‌های باطل‌سازی را از DataSource نادیده بگیرد برطرف شد.
  • مشکلی در منطق واکشی صفحه برطرف شد که گاهی باعث می‌شد تا زمانی که PagingDataAdapter.refresh()‎ فراخوانی نشده است، نسل‌های جدید PagingSource را دریافت نکند
  • مشکلی برطرف شد که باعث می‌شد گاهی‌اوقات هنگام استفاده از DataSource تبدیل‌شده به PagingSource (مانند آنچه توسط Room تولید می‌شود) در ارتباط با RemoteMediator، موقعیت پیمایش ازدست برود

همیاری خارجی

  • از ‎ @simonschiller به‌خاطر افزودن عملگرهای تبدیل ناهمگام مبتنی بر RxJava2،‏ RxJava3، و Guava برای PagingData سپاس‌گزاریم!

نسخه 3.0.0-alpha06

‫۲ سپتامبر ۲۰۲۰ (۱۲ شهریور ۱۳۹۹)

‫androidx.paging:paging-*:3.0.0-alpha06 منتشر شد. نسخه 3.0.0-alpha06 شامل این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • UnsupportedOperationException با پیام‌رسانی واضح‌تر درباره عدم پشتیبانی از شناسه‌های پایدار اکنون هروقت PagingDataAdapter.setHasStableIds فراخوانی شود، نشان داده می‌شود. (Ib3890, b/158801427)

رفع اشکال‌ها

  • ‫insertSeparators دیگر صفحه‌های خالی را فیلتر نمی‌کند و به ارائه‌دهنده اجازه می‌دهد فاصله پیش‌واکشی را حتی در مواردی که صفحه‌های خالی زیادی درج شده است رعایت کند. (I9cff6، b/162538908)

نسخه 3.0.0-alpha05

‫۱۹ اوت ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha05 منتشر شد. نسخه 3.0.0-alpha05 حاوی این commit-ها است.

رفع اشکال‌ها

  • اکنون صفحه‌بندی حتی زمانی که داده‌های ارائه‌شده به‌شدت فیلتر شده باشند، صفحات را به‌درستی پیش‌واکشی می‌کند
  • برگرداندن LoadResult.Error به بارگیری مجدد دیگر باعث نمی‌شود دسترسی‌های «مورد» به‌اشتباه دوباره امتحان کردن را مجدداً راه‌اندازی کند

همیاری خارجی

  • از Clara F به‌خاطر کمک به پاک‌سازی برخی‌از آزمایش‌ها سپاس‌گزاریم! (549612)

نسخه 3.0.0-alpha04

۵ اوت ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha04 منتشر شد. نسخه 3.0.0-alpha04 شامل این commit-ها است.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫peek() API به AsyncPagingDataDiffer و PagingDataAdapter اضافه شد تا امکان دسترسی به داده‌های ارائه‌شده بدون بار کردن صفحه راه‌انداز فراهم شود. (I38898، b/159104197)
  • «میانای برنامه‌سازی کاربردی» snapshot() به PagingDataAdapter و AsyncPagingDataDiffer اضافه شد تا امکان بازیابی موارد ارائه‌شده بدون راه‌اندازی واکشی صفحه فراهم شود. (I566b6،‏ b/159104197)
  • سازنده PagingData.from(List<T>) اضافه شد تا امکان ارائه فهرست‌های ایستا فراهم شود، که می‌تواند با جریان کلی PagingData ترکیب شود تا فهرست‌های ایستا در وضعیت‌های خاصی نمایش داده شود، مثلاً قبل‌از اینکه REFRESH اولیه تمام شود یا صرفاً برای آزمایش تبدیل‌ها. (Id134d)
  • منسوخ کردن میاناهای برنامه‌سازی کاربردی dataRefresh Flow / Listener چون هدف آن‌ها نمایش وضعیت موارد ارائه‌شده در REFRESH بود، اما با بهبود زمان‌بندی فراخوان برگشتی loadState Flow / Listener و ویژگی itemCount، این میاناهای برنامه‌سازی کاربردی زائد هستند (Ia19f3)
  • پیچ‌های سازگاری RxJava3 برای PagingSource و RemoteMediator اضافه شد (I49ef3، b/161480176)

رفع اشکال‌ها

  • PositionalDataSource تبدیل‌شده به PagingSource ازطریق کمک‌کننده toPagingSourceFactory، ازجمله PagingSource تولیدشده توسط Room اکنون به‌درستی خود را برای پشتیبانی از پرش علامت‌گذاری می‌کنند. (I3e84c،‏ b/162161201)
  • اشکالی برطرف شد که در آن استفاده از نوع همگام submitData گاهی اوقات منجر به رقابت می‌شد و ClosedSendChannelException را ایجاد می‌کرد (I4d702، b/160192222)

همیاری خارجی

  • از زک سویرز برای افزودن پوشش‌های سازگاری RxJava3 ازطرف Slack سپاس‌گزاریم! (I49ef3، b/161480176)

نسخه 3.0.0-alpha03

‫۲۲ ژوئیه ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha03 منتشر شد. نسخه ۳.۰.۰-alpha03 شامل این تعهدات است.

تغییرات میانای برنامه‌سازی کاربردی

  • سازنده PagingState اکنون عمومی است که باید آزمایش پیاده‌سازی‌های getRefreshKey() را آسان‌تر کند (I8bf15)
  • انواع تابع نگاشت Kotlin مربوط به DataSource را از Java پنهان کرد تا ابهام بین انواع اصلی و Kotlin برطرف شود. (If7b23، b/161150011)
  • میاناهای برنامه‌سازی کاربردی اضافی که برای راحتی کاربران Kotlin درنظر گرفته شده‌اند با @JvmSynthetic علامت‌گذاری شده‌اند (I56ae5)
  • افزودن اضافه‌بارها برای سازنده LoadResult.Page که itemsBefore و itemsAfter را به‌طور پیش‌فرض روی COUNT_UNDEFINED تنظیم می‌کند (I47849)
  • اپراتورهای PagingData موجود را به‌گونه‌ای تغییر دادیم که روش‌های تعلیق را بپذیرند و اپراتورهای جدید mapSync،‏ flatMapSync، و filterSync غیرتعلیقی را برای کاربران Java معرفی کردیم. روش‌های تبدیل موجود به توابع افزونه منتقل شده‌اند، بنابراین کاربران Kotlin اکنون باید آن‌ها را وارد کنند. (I34239، b/159983232)

رفع اشکال‌ها

  • Room (و PositionalDataSource) PagingSources اکنون یک جداکننده پیشرو را به‌عنوان بخشی از صفحه اول نمایش می‌دهند، بنابراین کاربر برای آشکار کردن آن نیازی به پیمایش ندارد. (I6f747، b/160257628)
  • دسترسی به موارد در جای‌بان‌ها اکنون به‌درستی بارگیری‌های PagingSource را راه‌اندازی می‌کند تا زمانی که صفحه‌ای برگردانده شود که نمایه درخواست‌شده را پس‌از تبدیل شدن توسط PagingData.filter()‎ برآورده کند (I95625، b/158763195)
  • اشکالی برطرف شد که در آن گاهی اوقات پیمایش پس‌از برگشتن خطا از PagingSource می‌توانست مانع از امتحان مجدد PagingDataAdapter.retry() شود. (I1084f، b/160194384)
  • مشکلی را برطرف می‌کند که در آن دسترسی به موارد پس‌از رها کردن صفحه ممکن است صفحه‌ها را بار نکند، اگرچه دسترسی به مورد در prefetchDistance (Ie95ae، b/160038730) باشد
  • تنظیم PagingConfig.maxSize دیگر پس‌از رویداد رها کردن، جای‌بان‌ها را فعال نمی‌کند (I2be29، b/159667766)

نسخه 3.0.0-alpha02

۲۴ ژوئن ۲۰۲۰

‫androidx.paging:paging-*:3.0.0-alpha02 منتشر شد. نسخه 3.0.0-alpha02 شامل این تعهدها است.

تغییرات میانای برنامه‌سازی کاربردی

  • سربار برای سازنده PagingConfig با مقادیر پیش‌فرض مشترک اضافه شد (I39c50، b/158576040)
  • سربارگذاری‌هایی برای سازنده‌های PagingDataAdapter و AsyncPagingDataDiffer با مقادیر پیش‌فرض رایج اضافه شد (Ie91f5)
  • میاناهای برنامه‌سازی کاربردی آداپتور، dataRefreshFlow و dataRefreshListener اکنون یک مقدار بولی را برای نشان دادن اینکه آیا PagingData خالی است یا نه منتقل می‌کنند (I6e37e، b/159054196)
  • RxJava و Guava APIs برای RemoteMediator اضافه شد - RxRemoteMediator و ListenableFutureRemoteMediator
  • برای دسترسی به موارد رایج مثل isEmpty() و firstItemOrNull()، یاری‌رسان‌هایی به PagingState اضافه شد (I3b5b6، b/158892717)

رفع اشکال‌ها

  • Pager اکنون استفاده مجدد از PagingSource را در کارخانه بررسی می‌کند تا از استفاده مجدد تصادفی از PagingSource نامعتبر که خطای نامشخصی ارائه می‌داد جلوگیری کند (I99809، b/158486430)
  • خطاهای ناشی از REFRESH (بازآوری) RemoteMediator دیگر مانع از بارگیری PagingSource نمی‌شود (I38b1b، b/158892717)
  • نسخه غیرتعلیقی submitData دیگر به‌دلیل جمع‌آوری هم‌زمان در چند PagingData وقتی پس‌از نسخه تعلیقی submitData فراخوانی می‌شود باعث خرابی نمی‌شود. (I26358، b/158048877)
  • استثنای «نمی‌توان دو بار از صفحه‌بند جمع‌آوری کرد» که ممکن بود پس‌از تغییر پیکربندی رخ دهد برطرف شد (I58bcc، b/158784811)

نسخه 3.0.0-alpha01

‫۱۰ ژوئن ۲۰۲۰ (۲۱ خرداد ۱۳۹۹)

‫androidx.paging:paging-*:3.0.0-alpha01 منتشر شد. نسخه 3.0.0-alpha01 حاوی این commit-ها است.

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

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

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

  • ‫Paging 3 javadocs هنوز دردسترس نیست. در این فاصله، لطفاً از راهنماهای پیوندشده در بالا یا اسناد Kotlin استفاده کنید. (b/158614050)

نسخه ۲.۱.۲

نسخه ۲.۱.۲

۱۸ مارس ۲۰۲۰

‫androidx.paging:paging:2.1.2 منتشر شد. نسخه ۲.۱.۲ حاوی این ثبت‌ها درمقابل ۲.۱.۰ است.

رفع اشکال‌ها

  • رفع مشکل IndexOutOfBoundsException در موارد نادری که موقعیت درطول نامعتبرسازی تبدیل می‌شود.

مشکل انتشار

  • نسخه 2.1.1 صفحه‌بندی به‌اشتباه از شاخه‌ای با پیکربندی نادرست منتشر شده است و میاناهای برنامه‌سازی کاربردی و عملکردهای نیمه‌پیاده‌سازی‌شده‌ای را که در نسخه آتی ارائه خواهند شد درمعرض دید قرار داده است.

  • «صفحه‌بندی 2.1.2» حاوی اصلاح بار مرکزی است که دراصل در نسخه ۲.۱.۱ منتشر شده بود، اما این بار به‌درستی در بالای نسخه ۲.۱.۰ انتخاب شده است. اگر درحال‌حاضر از نسخه ۲.۱.۱ استفاده می‌کنید، قویاً توصیه می‌شود به این نسخه ارتقا دهید.

نسخه ۲.۱.۱

نسخه ۲.۱.۱

‫۱۸ دسامبر ۲۰۱۹

‫androidx.paging:paging-*:2.1.1 منتشر شد. نسخه ۲.۱.۱ حاوی این ثبت‌ها است.

رفع اشکال‌ها

  • بارگیری‌های اولیه متوالی از PositionalDataSources اکنون وقتی جای‌بان‌ها غیرفعال باشند، حول آخرین دسترسی متمرکز می‌شوند

نسخه ۲.۱.۰

نسخه ۲.۱.۰

۲۵ ژانویه ۲۰۱۹

صفحه‌بندی 2.1.0 بدون تغییر نسبت به 2.1.0-rc01 منتشر شده است.

نسخه 2.1.0-rc01

۶ دسامبر ۲۰۱۸

صفحه‌بندی 2.1.0-rc01 بدون تغییر نسبت به 2.1.0-beta01 منتشر شده است.

نسخه 2.1.0-beta01

۱ نوامبر ۲۰۱۸

صفحه‌بندی 2.1.0-beta01 بدون تغییر از 2.1.0-alpha01 منتشر شد.

نسخه 2.1.0-alpha01

۱۲ اکتبر ۲۰۱۸

صفحه‌بندی 2.1.0-alpha01 دو افزودنی اصلی دارد - حذف صفحه، و کتابخانه‌های افزونه KTX برای هر آرتیفکت - و همچنین چندین تغییر API و رفع اشکال دیگر.

تغییرات میانای برنامه‌سازی کاربردی

  • PagedList.Config.Builder.setMaxSize() برای محدود کردن تعداد موارد بارشده در حافظه اضافه شد.
  • ‫androidx.paging.Config() به‌عنوان جایگزین Kotlin برای PagedList.Config.Builder اضافه شد
  • ‫androidx.paging.PagedList() به‌عنوان جایگزین Kotlin برای PagedList.Builder اضافه شد
  • ‫DataSourceFactory.toLiveData() به‌عنوان جایگزین Kotlin برای LivePagedListBuilder اضافه شد
  • ‫DataSourceFactory.toObservable() و toFlowable() به‌عنوان جایگزین‌های Kotlin برای RxPagedListBuilder اضافه شدند
  • ‫AsyncPagedListDiffer.addPagedListListener() برای گوش دادن به زمانی که PagedList جابه‌جا می‌شود اضافه شد. b/111698609
  • گونه PagedListAdapter.onCurrentListChanged() اضافه شد که فهرست قدیمی و جدید را رد می‌کند، گونه قبلی منسوخ شد.
  • ‫PagedListAdapter/AsyncPagedListDiffer.submitList() گونه اضافه شد که پس‌از تفاوت‌گیری، یک تماس برگشتی اضافی می‌گیرد که اگر/وقتی فهرست صفحه‌بندی‌شده نمایش داده شود راه‌اندازی می‌شود. این کار به شما امکان می‌دهد جایگزینی PagedList را با به‌روزرسانی‌های دیگر واسط کاربر همگام‌سازی کنید. b/73781068
  • PagedList.getLoadedCount() اضافه شد تا بدانید چند وسیله در حافظه است. توجه داشته باشید که اگر جای‌بان‌ها غیرفعال باشند، مقدار برگشتی همیشه برابر با .size() است.

رفع اشکال‌ها

  • رفع شرایط رقابتی هنگام تفاضل‌گیری درصورت استفاده مجدد از فهرست‌ها b/111591017
  • PagedList.loadAround() اکنون وقتی نمایه نامعتبر باشد IndexOutOfBoundsException را برمی‌گرداند. قبلاً ممکن بود با استثنای نامشخص دیگری ازکار بیفتد.
  • موردی را برطرف کردیم که در آن اندازه بارگیری اولیه بسیار کوچک همراه با داده‌های بدون تغییر منجر به عدم بارگیری بیشتر می‌شد b/113122599

نسخه ۲.۰.۰

نسخه ۲.۰.۰

‫۱ اکتبر ۲۰۱۸

Paging 2.0.0 با یک رفع اشکال منتشر شده است.

رفع اشکال‌ها

  • خرابی‌ای که ممکن بود با پیمایش بسیار سریع بااستفاده از PositionalDataSource و جای‌بان‌ها b/114635383 رخ دهد برطرف شد.

نسخه 2.0.0-beta01

۲ ژوئیه ۲۰۱۸

رفع اشکال‌ها

  • مشکل ناپدید شدن محتوا در برخی موارد پیش‌افزودن (غیرفعال بودن جای‌بان‌ها، PositionalDataSource) برطرف شد b/80149146
  • (قبلاً در 1.0.1 منتشر شده است) خرابی‌هایی که در آن‌ها PagedListAdapter و AsyncPagedListDiffer نمی‌توانستند رویدادهای جابه‌جایی را علامت‌گذاری کنند برطرف شد. b/110711937

وابستگی‌های Pre-AndroidX

برای نسخه‌های پیش‌از AndroidX از «صفحه‌بندی» که در ادامه می‌آید، این وابستگی‌ها را اضافه کنید:

dependencies {
    def paging_version = "1.0.0"

    implementation "android.arch.paging:runtime:$paging_version"

    // alternatively - without Android dependencies for testing
    testImplementation "android.arch.paging:common:$paging_version"

    // optional - RxJava support
    implementation "android.arch.paging:rxjava2:$paging_version"
}

نسخه ۱.۰.۱

نسخه ۱.۰.۱

۲۶ ژوئن ۲۰۱۸

Paging 1.0.1 با یک رفع اشکال در runtime منتشر شد. برای پایداری، اکیداً توصیه می‌کنیم از 1.0.1 استفاده کنید. Paging RxJava2 1.0.1 نیز منتشر شده است و با 1.0.0-rc1 یکسان است.

رفع اشکال‌ها

  • خرابی‌هایی که در آن‌ها PagedListAdapter و AsyncPagedListDiffer نمی‌توانستند رویدادهای جابه‌جایی را علامت‌دهی کنند برطرف شد. b/110711937

RxJava2 Version 1.0.0

RxJava2 نسخه 1.0.0-rc1

۱۶ مه ۲۰۱۸

‫Paging RxJava2 1.0.0-rc1 به نامزد انتشار بدون تغییر از نسخه اولیه آلفا منتقل می‌شود.

نسخه ۱.۰.۰

نسخه 1.0.0-rc1

‫۱۹ آوریل ۲۰۱۸ نامزد انتشار صفحه‌بندی

ما دیگر هیچ مشکل شناخته‌شده یا ویژگی جدیدی برای انتشار «صفحه‌بندی» 1.0.0 برنامه‌ریزی نکرده‌ایم. لطفاً پروژه‌هایتان را ارتقا دهید تا از 1.0.0-rc1 استفاده کنید و به ما کمک کنید آن را در شرایط سخت آزمایش کنیم تا بتوانیم 1.0.0 بسیار مطمئنی ارائه دهیم.

هیچ تغییری در این نسخه پخش وجود ندارد، این نسخه پخش همانند 1.0.0-beta1 است.

نسخه 1.0.0-beta1

۵ آوریل ۲۰۱۸

Paging برای مدت کوتاهی در نسخه بتا خواهد بود و سپس به نامزد انتشار ارتقا می‌یابد. ما قصد نداریم تغییرات بیشتری در API برای Paging 1.0 ایجاد کنیم و سطح انتظار برای هرگونه تغییر در API بسیار بالا است.

پشتیبانی Alpha RxJava2 برای «صفحه‌بندی» به‌عنوان یک ماژول اختیاری جداگانه (android.arch.paging:rxjava2:1.0.0-alpha1) منتشر شده است و تا زمانی‌که پایدار شود، به‌طور موقت نسخه‌بندی جداگانه خواهد داشت.

این کتابخانه جدید جایگزین RxJava2 برای LivePagedListBuilder ارائه می‌دهد که قادر به ساختن Observable و Flowable است و به‌جای Executor، Scheduler می‌گیرد:

کاتلین

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

جاوا

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

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

  • ‫RxPagedListBuilder ازطریق عنصر جدید android.arch.paging:rxjava2 اضافه شده است.

تغییرات میانای برنامه‌سازی کاربردی

  • تغییرات API برای روشن کردن نقش اجراکنندگان در سازندگان:

    • نام setBackgroundThreadExecutor() به setFetchExecutor() تغییر کرد (در PagedList.Builder و LivePagedListBuilder)

    • نام setMainThreadExecutor() به setNotifyExecutor() (در PagedList.Builder) تغییر کرد.

  • ‫PagedList.mCallbacks عضو ثابت خصوصی شد.

رفع اشکال‌ها

  • LivePagedListBuilder بارگیری اولیه PagedList را در مجری مشخص‌شده راه‌اندازی می‌کند، به‌جای استخر رشته IO مؤلفه‌های Arch.

  • رفتار باطل‌سازی در پوشاننده‌های داخلی DataSource (که برای پیاده‌سازی DataSource.map، و همچنین بار کردن PositionalDataSource با جای‌بان غیرفعال‌شده استفاده می‌شود) اصلاح شد b/77237534

نسخه 1.0.0-alpha7

۲۱ مارس ۲۰۱۸

Paging 1.0.0-alpha7 همراه با Lifecycles 1.1.1 منتشر می‌شود. ازآنجایی‌که Paging alpha7 به انتقال کلاس Function که در بالا ذکر شد بستگی دارد، باید وابستگی lifecycle:runtime را به android.arch.lifecycle:runtime:1.1.1 به‌روز کنید.

قرار است «صفحه‌بندی» alpha7 آخرین نسخه قبل‌از انتشار نسخه بتای «صفحه‌بندی» باشد.

تغییرات میانای برنامه‌سازی کاربردی

  • اکنون اشیای DataSource.LoadParams سازنده عمومی دارند و اشیای DataSource.LoadCallback اکنون انتزاعی هستند. این کار امکان پیچیدن DataSource یا آزمایش مستقیم DataSource با بازخوانی ساختگی را فراهم می‌کند. b/72600421
  • نگاشت‌کننده‌ها برای DataSource و DataSource.Factory
    • ‫map(Function<IN,OUT>) به شما امکان می‌دهد نتایج بارگیری‌شده توسط DataSource را تبدیل، بسته‌بندی، یا تزئین کنید.
    • mapByPage(<List<IN>,List<OUT>>) همین کار را برای پردازش دسته‌ای فعال می‌کند (برای مثال، اگر موارد بارشده از SQL نیاز به پُرسمان اضافی از پایگاه داده جداگانه‌ای داشته باشند، این کار می‌تواند به‌صورت دسته‌ای انجام شود.)
  • ‫PagedList#getDataSource() به‌عنوان روش تسهیلات اضافه شد b/72611341
  • همه کلاس‌های منسوخ‌شده از API برداشته شده است، ازجمله بقایای بسته recyclerview.extensions و LivePagedListProvider.
  • DataSource.Factory از میانای به کلاس انتزاعی تغییر کرده است تا عملکرد نقشه فعال شود.

رفع اشکال‌ها

  • Builders به final تغییر کرد. b/70848565
  • پیاده‌سازی اتاق DataSource اکنون برای مدیریت پُرسمان‌های چند جدولی اصلاح شده است - این اصلاح در اتاق 1.1.0-beta1 قرار دارد، به بالا مراجعه کنید.
  • اشکالی برطرف شد که در آن BoundaryCallback.onItemAtEndLoaded برای PositionalDataSource فراخوانده نمی‌شد اگر جای‌بان‌ها فعال باشند و اندازه کل مضربی دقیق از اندازه صفحه باشد.

نسخه 1.0.0-alpha5

۲۲ ژانویه ۲۰۱۸

رفع اشکال‌ها

  • رفع مشکل بار کردن صفحه وقتی جای‌بان‌ها غیرفعال هستند b/70573345
  • ثبت گزارش اضافی برای ردیابی اشکال IllegalArgumentException b/70360195 (و اصلاح احتمالی در سمت Room)
  • رفع اشکالات کد نمونه Javadoc b/70411933، b/71467637