পেজিং লাইব্রেরি ওভারভিউ Android Jetpack-এর অংশ।
পেজিং লাইব্রেরি আপনাকে স্থানীয় স্টোরেজ বা নেটওয়ার্ক থেকে আরও বড় ডেটাসেটের ডেটার পৃষ্ঠা লোড ও ডিসপ্লে করতে সাহায্য করে। এই পদ্ধতি আপনার অ্যাপকে নেটওয়ার্ক ব্যান্ডউইথ ও সিস্টেম রিসোর্স, দুটিই আরও দক্ষতার সাথে ব্যবহার করতে দেয়। পেজিং লাইব্রেরির কম্পোনেন্টগুলি সাজেস্ট করা Android অ্যাপ আর্কিটেকচারে ফিট করার জন্য ডিজাইন করা হয়েছে, অন্যান্য Jetpack কম্পোনেন্টের সাথে পরিষ্কারভাবে ইন্টিগ্রেট করা হয়েছে এবং ফার্স্ট-ক্লাস Kotlin সহায়তা প্রদান করে।
পেজিং লাইব্রেরি ব্যবহার করার সুবিধা
পেজিং লাইব্রেরিতে নিম্নলিখিত বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে:
- আপনার পেজ করা ডেটার জন্য ইন-মেমরি ক্যাশিং। এটি নিশ্চিত করতে সাহায্য করে যে আপনার অ্যাপ পেজ করা ডেটার সাথে কাজ করার সময় সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে।
- বিল্ট-ইন অনুরোধ ডিডুপ্লিকেশন, যা আপনার অ্যাপ যাতে নেটওয়ার্ক ব্যান্ডউইথ এবং সিস্টেম রিসোর্স দক্ষতার সাথে ব্যবহার করে তা নিশ্চিত করতে সাহায্য করে।
- Kotlin coroutines, flows ও Jetpack Compose-এর জন্য বিল্ট-ইন সহায়তা।
- রিফ্রেশ ও আবার চেষ্টা করার ক্ষমতা সহ সমস্যা সমাধানের জন্য বিল্ট-ইন সহায়তা।
- পেজিং সোর্স ও ডেটা ট্রান্সফর্মেশন যাচাই করার জন্য
TestPagerওasSnapshot-এর মতো ডেডিকেটেড টেস্টিং ইউটিলিটি।
সেটআপ
আপনার Android অ্যাপে পেজিং কম্পোনেন্ট ইমপোর্ট করতে, আপনার অ্যাপের build.gradle ফাইলে নিম্নলিখিত
ডিপেন্ডেন্সি যোগ করুন:
Kotlin
dependencies { val paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation("androidx.paging:paging-runtime:$paging_version") // Needed to collect PagingData flows in Jetpack Compose implementation("androidx.paging:paging-compose:$paging_version") // Needed to test PagingSource and PagingData transformations in isolation testImplementation("androidx.paging:paging-testing:$paging_version") }
গ্ৰুভি
dependencies { def paging_version = "3.5.3" // Needed for Android Views and LiveData. Optional if only using // paging-compose implementation "androidx.paging:paging-runtime:$paging_version" // Needed to collect PagingData flows in Jetpack Compose implementation "androidx.paging:paging-compose:$paging_version" // Needed to test PagingSource and PagingData transformations in isolation testImplementation "androidx.paging:paging-testing:$paging_version" }
লাইব্রেরি আর্কিটেকচার
পেজিং লাইব্রেরির কম্পোনেন্ট আপনার অ্যাপের তিনটি স্তরে কাজ করে:
- রিপোজিটরি লেয়ার
ViewModelলেয়ার- UI লেয়ার
এই বিভাগে পেজিং লাইব্রেরির কম্পোনেন্টগুলি বর্ণনা করা হয়েছে যা প্রতিটি লেয়ারে অপারেট করে এবং কীভাবে তারা একসাথে কাজ করে পেজ করা ডেটা লোড ও ডিসপ্লে করে।
রিপোজিটরি লেয়ার
রিপোজিটরি লেয়ারে প্রাথমিক পেজিং লাইব্রেরি কম্পোনেন্ট হল
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-কে অ্যাডাপ্টার বা ডিফারেন্সিং লজিক ছাড়াই ডেটা লোড, আপডেট এবং সমস্যার ক্ষেত্রে
অটোমেটিক প্রতিক্রিয়া জানাতে দেয়। items()-এ LazyPagingItems ফেরত পাঠাতে
Flow<PagingData>-এ collectAsLazyPagingItems() এক্সটেনশন ফাংশন ব্যবহার করুন,
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() } } } }
আরও তথ্যের জন্য, বড় ডেটা-সেট (পেজিং) দেখুন।
আপনার জন্য সাজেস্ট করা হয়েছে
- মনে রাখবেন: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট দেখানো হয়
- পৃষ্ঠা অনুযায়ী ডেটা লোড ও ডিসপ্লে করা
- পেজিং ৩-এ মাইগ্রেট করুন
- নেটওয়ার্ক ও ডেটাবেস থেকে পৃষ্ঠা