مروری بر کتابخانه صفحه‌بندی بخشی از جت‌پک اندروید .

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

مزایای استفاده از کتابخانه Paging

کتابخانه Paging شامل ویژگی‌های زیر است:

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

راه‌اندازی

برای وارد کردن کامپوننت‌های Paging به برنامه اندروید خود، وابستگی‌های زیر را به فایل 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"
}

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

اجزای کتابخانه Paging در سه لایه از برنامه شما عمل می‌کنند:

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

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

لایه مخزن

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

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

لایه ViewModel

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

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

لایه رابط کاربری

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

کتابخانه androidx.paging:paging-compose اضافه کنید تا از APIهای سازگار با 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()
            }
        }
    }
}

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

{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}