পেজিং লাইব্রেরি ওভারভিউ   Android Jetpack-এর অংশ।

পেজিং লাইব্রেরি আপনাকে স্থানীয় স্টোরেজ বা নেটওয়ার্ক থেকে বড় ডেটাসেটের ডেটা লোড ও ডিসপ্লে করতে সাহায্য করে। এই পদ্ধতি আপনার অ্যাপকে নেটওয়ার্ক ব্যান্ডউইথ ও সিস্টেম রিসোর্স, দুটিই আরও দক্ষতার সাথে ব্যবহার করতে দেয়। পেজিং লাইব্রেরির কম্পোনেন্টগুলি সাজেস্ট করা Android অ্যাপ আর্কিটেকচার-এর সাথে মানানসই করে ডিজাইন করা হয়েছে, অন্যান্য Jetpack কম্পোনেন্টের সাথে পরিষ্কারভাবে ইন্টিগ্রেট করা হয়েছে এবং ফার্স্ট-ক্লাস Kotlin সহায়তা প্রদান করে।

পেজিং লাইব্রেরি ব্যবহার করার সুবিধা

পেজিং লাইব্রেরিতে নিম্নলিখিত ফিচারগুলি অন্তর্ভুক্ত রয়েছে:

  • আপনার পেজ করা ডেটার জন্য ইন-মেমরি ক্যাশিং। এটি নিশ্চিত করতে সাহায্য করে যে আপনার অ্যাপ পেজ করা ডেটার সাথে কাজ করার সময় সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে।
  • বিল্ট-ইন অনুরোধ ডিডুপ্লিকেশন, যা আপনার অ্যাপ যাতে নেটওয়ার্ক ব্যান্ডউইথ এবং সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে তা নিশ্চিত করতে সাহায্য করে।
  • Kotlin কোরুটিন ও ফ্লোর জন্য ফার্স্ট-ক্লাস সাপোর্ট।
  • রিফ্রেশ ও আবার চেষ্টা করার ক্ষমতা সহ সমস্যা সমাধানের জন্য বিল্ট-ইন সহায়তা।

সেট-আপ করুন

আপনার Android অ্যাপে পেজিং কম্পোনেন্ট ইমপোর্ট করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত ডিপেন্ডেন্সি যোগ করুন:

Kotlin

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 লেয়ার
  • UI লেয়ার
এই ছবিতে দেখানো হয়েছে যে কীভাবে পেজ করা ডেটা রিপোজিটরি লেয়ারের PagingSource বা RemoteMediator কম্পোনেন্ট থেকে ViewModel লেয়ারের Pager কম্পোনেন্টে ফ্লো করে।
    তারপর, পেজার কম্পোনেন্ট UI লেয়ারে লেজি লেআউট কম্পোনেন্টে
    PagingData-এর ফ্লো এক্সপোজ করে।
ছবি ১. আপনার অ্যাপ আর্কিটেকচারে পেজিং লাইব্রেরি কীভাবে ফিট করে তার একটি উদাহরণ।

এই বিভাগে পেজিং লাইব্রেরির কম্পোনেন্ট সম্পর্কে বর্ণনা করা হয়েছে যা প্রতিটি লেয়ারে অপারেট করে এবং কীভাবে সেগুলি একসাথে কাজ করে পেজ করা ডেটা লোড ও ডিসপ্লে করে।

রিপোজিটরি লেয়ার

রিপোজিটরি লেয়ারে প্রাথমিক পেজিং লাইব্রেরি কম্পোনেন্ট হল PagingSource। প্রতিটি PagingSource অবজেক্ট ডেটার সোর্স এবং সেই সোর্স থেকে কীভাবে ডেটা ফিরিয়ে আনতে হবে তা নির্ধারণ করে। PagingSource অবজেক্ট নেটওয়ার্ক সোর্স ও লোকাল ডেটাবেস সহ যেকোনও একটি সোর্স থেকে ডেটা লোড করতে পারে।

আপনি ব্যবহার করতে পারেন এমন আরেকটি পেজিং লাইব্রেরি কম্পোনেন্ট হল RemoteMediator। একটি RemoteMediator অবজেক্ট একটি লেয়ার্ড ডেটা সোর্স থেকে পেজিং পরিচালনা করে, যেমন একটি স্থানীয় ডাটাবেস ক্যাশে সহ নেটওয়ার্ক ডেটা সোর্স।

ViewModel লেয়ার

Pager কম্পোনেন্ট PagingSource অবজেক্ট এবং PagingConfig কনফিগারেশন অবজেক্টের উপর ভিত্তি করে রিঅ্যাক্টিভ স্ট্রিমে দেখানো PagingData-এর ইনস্ট্যান্স তৈরি করার জন্য একটি পাবলিক API প্রদান করে।

ViewModel লেয়ারকে UI-এর সাথে কানেক্ট করে এমন কম্পোনেন্ট হল PagingData। PagingData অবজেক্ট হল পৃষ্ঠা সংখ্যা সহ ডেটার স্ন্যাপশটের একটি কন্টেনার। এটি একটি PagingSource অবজেক্ট কোয়েরি করে এবং ফলাফল স্টোর করে।

UI লেয়ার

প্রাইমারি পেজিং UI API হল collectAsLazyPagingItems()। এটি পেজ করা আইটেমকে ডেটার তালিকা হিসেবে দেখায় যা Compose-এর লেজি লেআউট কম্পোনেন্ট, যেমন LazyColumn এবং LazyRow-এর মাধ্যমে সহজেই ব্যবহার করা যায়।

Compose-এর সাথে মানানসই API ব্যবহার করতে androidx.paging:paging-compose লাইব্রেরি যোগ করুন যা UI-কে অ্যাডাপ্টার বা ডিফারেন্সিং লজিক ছাড়াই ডেটা লোড, আপডেট এবং সমস্যার ক্ষেত্রে অটোমেটিক প্রতিক্রিয়া জানাতে দেয়। Flow<PagingData>-এ collectAsLazyPagingItems() এক্সটেনশন ফাংশন ব্যবহার করুন যাতে LazyColumn-এ items()-এ ফেরত আসা LazyPagingItems পাস করা যায়।

@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()
            }
        }
    }
}

আরও তথ্যের জন্য, বড় ডেটা-সেট (পেজিং) দেখুন।