نمای کلی کتابخانه صفحه‌بندی   بخشی از Android Jetpack.

کتابخانه «صفحه‌بندی» به شما کمک می‌کند صفحه‌های داده را از مجموعه داده بزرگ‌تری از فضای ذخیره‌سازی محلی یا ازطریق شبکه بار و نمایش دهید. این رویکرد به برنامه شما امکان می‌دهد از پهنای باند شبکه و منابع سیستم به‌طور کارآمدتری استفاده کند. اجزای کتابخانه Paging به‌گونه‌ای طراحی شده‌اند که در معماری برنامه Android توصیه‌شده جای بگیرند، به‌طور یکپارچه با دیگر اجزای Jetpack ادغام شوند، و پشتیبانی درجه یک از Kotlin ارائه دهند.

مزایای استفاده از کتابخانه «صفحه‌بندی»

کتابخانه «صفحه‌بندی» شامل ویژگی‌های زیر است:

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

راه‌اندازی

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

کاتلین

dependencies {
  val paging_version = "3.4.2"

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

  // Jetpack Compose integration
  implementation("androidx.paging:paging-compose:$paging_version")
}

شیک

dependencies {
  def paging_version = "3.4.2"

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

  // Jetpack Compose integration
  implementation "androidx.paging:paging-compose:$paging_version"
}

معماری کتابخانه

عناصر کتابخانه «صفحه‌بندی» در سه لایه برنامه شما عمل می‌کنند:

  • لایه مخزن
  • لایه ViewModel
  • لایه میانای کاربر
تصویری که جریان داده‌های صفحه‌بندی‌شده را از عناصر PagingSource یا RemoteMediator در لایه مخزن به عنصر Pager در لایه ViewModel نشان می‌دهد.
    سپس عنصر «صفحه‌بندی» یک «جریان» از «داده‌های صفحه‌بندی» را به
    عناصر چیدمان تنبل در لایه رابط کاربری نمایان می‌کند.
شکل ۱. نمونه‌ای از نحوه قرارگیری کتابخانه «صفحه‌بندی» در معماری برنامه شما.

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

لایه مخزن

جزء اصلی کتابخانه «صفحه‌بندی» در لایه مخزن PagingSource است. هر PagingSource شیء منبع داده و نحوه بازیابی داده‌ها از آن منبع را تعریف می‌کند. هدف PagingSource می‌تواند داده‌ها را از هر منبع تکی بار کند، ازجمله منابع شبکه و پایگاه‌های داده محلی.

یکی دیگر از عناصر کتابخانه «صفحه‌بندی» که ممکن است استفاده کنید RemoteMediator است. شیء RemoteMediator صفحه‌بندی را از منبع داده لایه‌ای، مثل منبع داده شبکه با حافظه نهان پایگاه داده محلی، مدیریت می‌کند.

لایه ViewModel

عنصر Pager یک میانای برنامه‌سازی کاربردی عمومی برای ساختن نمونه‌های PagingData ارائه می‌دهد که در جریان‌های واکنشی، براساس یک شیء PagingSource و یک شیء پیکربندی PagingConfig نمایان می‌شوند.

جزء متصل‌کننده لایه ViewModel به واسط کاربر PagingData است. PagingData شیء محتوی نماگرفتی از داده‌های صفحه‌بندی‌شده است. شیء PagingSource را پُرسمان می‌کند و نتیجه را ذخیره می‌کند.

لایه میانای کاربر

میانای برنامه‌سازی کاربردی اصلی «واسط کاربر صفحه‌بندی» collectAsLazyPagingItems() است. این تابع موارد صفحه‌بندی‌شده را به‌عنوان فهرستی از داده‌ها نشان می‌دهد که به‌راحتی توسط عناصر چیدمان تنبل Compose، مانند LazyColumn و LazyRow، قابل استفاده است.

برای استفاده از میاناهای برنامه‌سازی کاربردی سازگار با Compose که به واسطه آن‌ها واسط کاربر می‌تواند بدون نیاز به آداپتورها یا منطق تفاضلی، به‌طور خودکار به بار داده‌ها، به‌روزرسانی‌ها، و خطاها واکنش نشان دهد، کتابخانه androidx.paging:paging-compose را اضافه کنید. از تابع افزونه collectAsLazyPagingItems() در Flow<PagingData> استفاده کنید تا LazyPagingItems برگشتی را در items() در LazyColumn بگذرانید.

@Composable
fun MessageList(pager: Pager<Int, Message>) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
}

برای اطلاعات بیشتر، مجموعه‌های داده بزرگ (صفحه‌بندی) را ببینید.