পেজিং 3 এ স্থানান্তর করুন

পেজিং ৩, পেজিং লাইব্রেরির পূর্ববর্তী সংস্করণগুলো থেকে উল্লেখযোগ্যভাবে ভিন্ন। এই সংস্করণটি উন্নত কার্যকারিতা প্রদান করে এবং পেজিং ২ ব্যবহারের সাধারণ অসুবিধাগুলোর সমাধান করে। যদি আপনার অ্যাপ ইতিমধ্যেই পেজিং লাইব্রেরির কোনো পূর্ববর্তী সংস্করণ ব্যবহার করে থাকে, তবে পেজিং ৩-এ স্থানান্তরের বিষয়ে আরও জানতে এই পৃষ্ঠাটি পড়ুন।

আপনার অ্যাপে যদি পেজিং লাইব্রেরির প্রথম সংস্করণ হিসেবে পেজিং ৩ ব্যবহার করা হয়ে থাকে, তাহলে এর প্রাথমিক ব্যবহারবিধি জানতে ‘পেজ করা ডেটা লোড ও প্রদর্শন’ দেখুন।

পেজিং ৩-এ স্থানান্তরের সুবিধাসমূহ

পেজিং ৩-এ নিম্নলিখিত বৈশিষ্ট্যগুলো অন্তর্ভুক্ত রয়েছে, যা লাইব্রেরির পূর্ববর্তী সংস্করণগুলোতে ছিল না:

  • কোটলিন কোরাউটিন এবং ফ্লো-এর জন্য প্রথম শ্রেণীর সমর্থন।
  • RxJava Single অথবা Guava ListenableFuture প্রিমিটিভ ব্যবহার করে অ্যাসিঙ্ক লোডিংয়ের সুবিধা।
  • রেসপন্সিভ UI ডিজাইনের জন্য বিল্ট-ইন লোড স্টেট এবং এরর সিগন্যাল, যার মধ্যে রিট্রাই এবং রিফ্রেশ কার্যকারিতাও অন্তর্ভুক্ত।
  • রিপোজিটরি লেয়ারে উন্নতিসাধন, যার মধ্যে রয়েছে বাতিল করার সুবিধা এবং একটি সরলীকৃত ডেটা সোর্স ইন্টারফেস।
  • প্রেজেন্টেশন লেয়ার, লিস্ট সেপারেটর, কাস্টম পেজ ট্রান্সফর্ম এবং লোডিং স্টেট হেডার ও ফুটারের উন্নতি সাধন করা হয়েছে।

আপনার অ্যাপটিকে পেজিং ৩-এ স্থানান্তর করুন

পেজিং ৩-এ সম্পূর্ণরূপে স্থানান্তরিত হতে হলে, আপনাকে পেজিং ২ থেকে তিনটি প্রধান উপাদানই স্থানান্তর করতে হবে:

  • DataSource ক্লাস
  • PagedList
  • PagedListAdapter

তবে, পেজিং ৩-এর কিছু উপাদান পেজিং-এর পূর্ববর্তী সংস্করণগুলোর সাথে পশ্চাৎ-সামঞ্জস্যপূর্ণ। বিশেষ করে, পেজিং ৩-এর PagingSource API পুরোনো সংস্করণগুলোর LivePagedListBuilder এবং RxPagedListBuilder এর জন্য একটি ডেটা সোর্স হিসেবে কাজ করতে পারে। একইভাবে, Pager API-টি asPagingSourceFactory() মেথড ব্যবহার করে পুরোনো DataSource অবজেক্টগুলো ব্যবহার করতে পারে। এর মানে হলো, আপনার কাছে নিম্নলিখিত মাইগ্রেশন বিকল্পগুলো রয়েছে:

  • আপনি আপনার DataSource PagingSource স্থানান্তর করতে পারেন, কিন্তু আপনার পেজিং বাস্তবায়নের বাকি অংশ অপরিবর্তিত রাখতে পারেন।
  • আপনি আপনার PagedList এবং PagedListAdapter মাইগ্রেট করতে পারেন, কিন্তু তারপরেও পুরোনো DataSource API ব্যবহার করতে পারবেন।
  • আপনার অ্যাপটিকে সম্পূর্ণরূপে পেজিং ৩-এ মাইগ্রেট করতে আপনি পুরো পেজিং ইমপ্লিমেন্টেশনটি মাইগ্রেট করতে পারেন।

এই পৃষ্ঠার বিভাগগুলিতে আপনার অ্যাপের প্রতিটি স্তরে পেজিং উপাদানগুলি কীভাবে স্থানান্তর করতে হয় তা ব্যাখ্যা করা হয়েছে।

DataSource ক্লাস

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

পেজিং ২-এর PageKeyedDataSource , PositionalDataSource এবং ItemKeyedDataSource কে পেজিং ৩-এ PagingSource API-এর অধীনে একত্রিত করা হয়েছে। পুরোনো সমস্ত API ক্লাসের লোডিং মেথডগুলোকে PagingSource এর একটিমাত্র load() মেথডে একত্রিত করা হয়েছে। এর ফলে কোডের পুনরাবৃত্তি কমে যায়, কারণ পুরোনো API ক্লাসগুলোর ইমপ্লিমেন্টেশনে থাকা লোডিং মেথডগুলোর লজিকের বেশিরভাগই প্রায়শই একই রকম হয়ে থাকে।

পেজিং ৩-এ সমস্ত লোডিং মেথড প্যারামিটার একটি LoadParams সিলড ক্লাস দ্বারা প্রতিস্থাপিত হয়, যার মধ্যে প্রতিটি লোড টাইপের জন্য সাবক্লাস অন্তর্ভুক্ত থাকে। আপনার load() মেথডে লোড টাইপগুলোর মধ্যে পার্থক্য করার প্রয়োজন হলে, পরীক্ষা করে দেখুন LoadParams এর কোন সাবক্লাসটি পাস করা হয়েছে: LoadParams.Refresh , LoadParams.Prepend , অথবা LoadParams.Append

PagingSource বাস্তবায়ন সম্পর্কে আরও জানতে, "একটি ডেটা উৎস সংজ্ঞায়িত করুন" দেখুন।

রিফ্রেশ কী

PagingSource এর ইমপ্লিমেন্টেশনগুলিতে অবশ্যই সংজ্ঞায়িত করতে হবে যে লোড হওয়া পেজড ডেটার মাঝখান থেকে রিফ্রেশ কীভাবে পুনরায় শুরু হবে। এটি করার জন্য, সবচেয়ে সম্প্রতি অ্যাক্সেস করা ইনডেক্স হিসাবে state.anchorPosition ব্যবহার করে সঠিক প্রাথমিক কী ম্যাপ করতে getRefreshKey() ইমপ্লিমেন্ট করুন।

কোটলিন

// Replaces ItemKeyedDataSource.
override fun getRefreshKey(state: PagingState<String, User>): String? {
  return state.anchorPosition?.let { anchorPosition ->
    state.getClosestItemToPosition(anchorPosition)?.id
  }
}

// Replacing PositionalDataSource.
override fun getRefreshKey(state: PagingState<Int, User>): Int? {
  return state.anchorPosition
}

জাভা

// Replaces ItemKeyedDataSource.
@Nullable
@Override
String getRefreshKey(state: PagingState<String, User>) {
  Integer anchorPosition = state.anchorPosition;
  if (anchorPosition == null) {
    return null;
  }

  return state.getClosestItemToPosition(anchorPosition);
}

// Replaces PositionalDataSource.
@Nullable
@Override
Integer getRefreshKey(state: PagingState<Integer, User>) {
  return state.anchorPosition;
}

জাভা

// Replacing ItemKeyedDataSource.
@Nullable
@Override
String getRefreshKey(state: PagingState<String, User>) {
  Integer anchorPosition = state.anchorPosition;
  if (anchorPosition == null) {
    return null;
  }

  return state.getClosestItemToPosition(anchorPosition);
}

// Replacing PositionalDataSource.
@Nullable
@Override
Integer getRefreshKey(state: PagingState<Integer, User>) {
  return state.anchorPosition;
}

তালিকা রূপান্তর

পেজিং লাইব্রেরির নিম্নতর সংস্করণগুলিতে, পেজ করা ডেটার রূপান্তর নিম্নলিখিত পদ্ধতিগুলির উপর নির্ভর করে:

  • DataSource.map()
  • DataSource.mapByPage()
  • DataSource.Factory.map()
  • DataSource.Factory.mapByPage()

পেজিং ৩-এ, সমস্ত রূপান্তর PagingData উপর অপারেটর হিসেবে প্রয়োগ করা হয়। যদি আপনি আপনার পেজ করা তালিকাটিকে রূপান্তর করার জন্য পূর্ববর্তী তালিকার কোনো পদ্ধতি ব্যবহার করেন, তবে আপনার নতুন PagingSource ব্যবহার করে Pager তৈরি করার সময় আপনাকে অবশ্যই আপনার রূপান্তরের লজিকটি DataSource থেকে PagingData তে স্থানান্তর করতে হবে।

পেজিং ৩ ব্যবহার করে পেজ করা ডেটাতে রূপান্তর প্রয়োগ করার বিষয়ে আরও জানতে, ‘ডেটা স্ট্রিম রূপান্তর করুন’ দেখুন।

PagedList

এই বিভাগে, পেজিং ৩-এ Pager এবং PagingData ব্যবহার করার জন্য একটি পুরোনো পেজিং ইমপ্লিমেন্টেশনকে মাইগ্রেট করতে প্রয়োজনীয় সমস্ত পরিবর্তন বর্ণনা করা হয়েছে।

PagedListBuilder ক্লাস

PagingData Paging 2-এর বিদ্যমান PagedList প্রতিস্থাপন করে। PagingData তে মাইগ্রেট করতে হলে, আপনাকে নিম্নলিখিত বিষয়গুলো আপডেট করতে হবে:

  • পেজিং কনফিগারেশন PagedList.Config থেকে PagingConfig এ স্থানান্তরিত হয়েছে।
  • LivePagedListBuilder এবং RxPagedListBuilder একত্রিত করে একটি একক Pager ক্লাস তৈরি করা হয়েছে।
  • Pager তার .flow প্রপার্টির মাধ্যমে একটি অবজার্ভেবল Flow<PagingData> প্রকাশ করে। RxJava এবং LiveData ভ্যারিয়েন্টগুলোও এক্সটেনশন প্রপার্টি হিসেবে উপলব্ধ, যেগুলোকে জাভা থেকে স্ট্যাটিক মেথড ব্যবহার করে কল করা যায় এবং যেগুলো যথাক্রমে paging-rxjava*paging-runtime মডিউল থেকে সরবরাহ করা হয়।

কোটলিন

val flow = Pager(
  // Configure how data is loaded by passing additional properties to
  // PagingConfig, such as prefetchDistance.
  PagingConfig(pageSize = 20)
) {
  ExamplePagingSource(backend, query)
}.flow
  .cachedIn(viewModelScope)

জাভা

// CoroutineScope helper provided by the lifecycle-viewmodel-ktx artifact.
CoroutineScope viewModelScope = ViewModelKt.getViewModelScope(viewModel);
Pager<Integer, User> pager = Pager<>(
  new PagingConfig(/* pageSize = */ 20),
  () -> ExamplePagingSource(backend, query));

Flowable<PagingData<User>> flowable = PagingRx.getFlowable(pager);
PagingRx.cachedIn(flowable, viewModelScope);

জাভা

// CoroutineScope helper provided by the lifecycle-viewmodel-ktx artifact.
CoroutineScope viewModelScope = ViewModelKt.getViewModelScope(viewModel);
Pager<Integer, User> pager = Pager<>(
  new PagingConfig(/* pageSize = */ 20),
  () -> ExamplePagingSource(backend, query));

PagingLiveData.cachedIn(PagingLiveData.getLiveData(pager), viewModelScope);

Paging 3 ব্যবহার করে PagingData অবজেক্টের একটি রিঅ্যাক্টিভ স্ট্রিম সেট আপ করার বিষয়ে আরও জানতে, “Set up a stream of PagingData” দেখুন।

স্তরযুক্ত উৎসগুলির জন্য BoundaryCallback

পেজিং ৩-এ, নেটওয়ার্ক এবং ডাটাবেস থেকে পেজিং-এর হ্যান্ডলার হিসেবে PagedList.BoundaryCallback পরিবর্তে RemoteMediator ব্যবহৃত হয়।

পেজিং ৩-এ নেটওয়ার্ক এবং ডেটাবেস থেকে পেজ করার জন্য RemoteMediator ব্যবহারের বিষয়ে আরও জানতে, অ্যান্ড্রয়েড পেজিং কোডল্যাব দেখুন।

PagedListAdapter

পেজিং ২-এ, একটি PagedList RecyclerView এর সাথে বাইন্ড করতে PagedListAdapter ব্যবহৃত হয়। পেজিং ৩-এ, PagedList এর পরিবর্তে PagingData ব্যবহৃত হয়। আপনি যদি আপনার অ্যাপের UI-এর জন্য Jetpack Compose ব্যবহার করা শুরু করেন, তবে পেজড ডেটা দেখানোর জন্য আপনার কোনো অ্যাডাপ্টারের প্রয়োজন নেই।

এর পরিবর্তে, PagingData আইটেমগুলো সংগ্রহ করতে এবং LazyColumn মতো @Composable ফাংশনগুলোতে সেগুলো প্রদর্শন করতে paging-compose আর্টিফ্যাক্ট এবং এর collectAsLazyPagingItems এক্সটেনশন মেথডটি ব্যবহার করুন।

Jetpack Compose-এর সাথে Paging 3 ব্যবহারের বিষয়ে আরও তথ্যের জন্য, Paging 3-এর ওভারভিউ দেখুন।

অতিরিক্ত সম্পদ

পেজিং লাইব্রেরি সম্পর্কে আরও জানতে, নিম্নলিখিত অতিরিক্ত রিসোর্সগুলো দেখুন:

কোডল্যাবস

নমুনা

{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}