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

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

যদি পেজিং 3 পেজিং লাইব্রেরির প্রথম সংস্করণ হয় যা আপনি আপনার অ্যাপে ব্যবহার করছেন, তাহলে মৌলিক ব্যবহারের তথ্যের জন্য পৃষ্ঠাযুক্ত ডেটা লোড এবং প্রদর্শন দেখুন।

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

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

  • Kotlin coroutines এবং Flow এর জন্য প্রথম-শ্রেণীর সমর্থন।
  • RxJava Single বা Guava ListenableFuture primitives ব্যবহার করে async লোডিংয়ের জন্য সমর্থন।
  • বিল্ট-ইন লোড অবস্থা এবং প্রতিক্রিয়াশীল UI ডিজাইনের জন্য ত্রুটি সংকেত, পুনঃপ্রচেষ্টা এবং রিফ্রেশ কার্যকারিতা সহ।
  • বাতিলকরণ সমর্থন এবং একটি সরলীকৃত ডেটা উৎস ইন্টারফেস সহ সংগ্রহস্থল স্তরের উন্নতি।
  • উপস্থাপনা স্তরের উন্নতি, তালিকা বিভাজক, কাস্টম পৃষ্ঠা রূপান্তর, এবং স্টেট হেডার এবং ফুটার লোড করা।

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

সম্পূর্ণরূপে পেজিং 3-এ স্থানান্তরিত করতে, আপনাকে অবশ্যই পেজিং 2 থেকে তিনটি প্রধান উপাদান স্থানান্তর করতে হবে:

  • DataSource ক্লাস
  • PagedList
  • PagedListAdapter

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

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

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

ডেটা সোর্স ক্লাস

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

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

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

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

রিফ্রেশ কী

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

কোটলিন

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

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

জাভা

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

  return state.getClosestItemToPosition(anchorPosition);
}

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

জাভা

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

  return state.getClosestItemToPosition(anchorPosition);
}

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

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

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

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

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

পেজিং 3 ব্যবহার করে পৃষ্ঠাযুক্ত ডেটাতে রূপান্তর প্রয়োগ করার বিষয়ে আরও জানতে, ট্রান্সফর্ম ডেটা স্ট্রীম দেখুন।

পেজডলিস্ট

এই বিভাগটি পেজিং 3 এ Pager এবং PagingData ব্যবহার করার জন্য একটি পুরানো পেজিং বাস্তবায়ন স্থানান্তর করার জন্য প্রয়োজনীয় সমস্ত পরিবর্তনগুলি বর্ণনা করে৷

PagedListBuilder ক্লাস

PagingData পেজিং 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);

পেজিং 3 ব্যবহার করে PagingData অবজেক্টের একটি প্রতিক্রিয়াশীল স্ট্রিম সেট আপ করার বিষয়ে আরও জানতে, পেজিং ডেটার একটি স্ট্রিম সেট আপ করুন দেখুন।

স্তরযুক্ত উত্সগুলির জন্য সীমানা কলব্যাক৷

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

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

PagedListAdapter

এই বিভাগটি পেজিং 3 থেকে PagingDataAdapter বা AsyncPagingDataDiffer ক্লাসগুলি ব্যবহার করার জন্য একটি পুরানো পেজিং বাস্তবায়ন স্থানান্তর করার জন্য প্রয়োজনীয় সমস্ত পরিবর্তনগুলি বর্ণনা করে৷

পেজিং 3 নতুন PagingData প্রতিক্রিয়াশীল স্ট্রীমগুলি পরিচালনা করতে PagingDataAdapter প্রদান করে। অন্যথায়, PagedListAdapter এবং PagingDataAdapter একই ইন্টারফেস আছে। PagedListAdapter থেকে PagingDataAdapter এ স্থানান্তর করতে, পরিবর্তে PagingDataAdapter প্রসারিত করতে আপনার PagedListAdapter এর বাস্তবায়ন পরিবর্তন করুন।

PagingDataAdapter সম্পর্কে আরও জানতে, একটি RecyclerView অ্যাডাপ্টার সংজ্ঞায়িত করুন দেখুন।

AsyncPagedListDiffer

আপনি যদি বর্তমানে AsyncPagedListDiffer সাথে একটি কাস্টম RecyclerView.Adapter বাস্তবায়ন ব্যবহার করেন, তাহলে পরিবর্তে পেজিং 3 এ দেওয়া AsyncPagingDataDiffer ব্যবহার করতে আপনার বাস্তবায়ন স্থানান্তর করুন:

কোটলিন

AsyncPagingDataDiffer(diffCallback, listUpdateCallback)

জাভা

new AsyncPagingDataDiffer(diffCallback, listUpdateCallback);

জাভা

new AsyncPagingDataDiffer(diffCallback, listUpdateCallback);

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

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

কোডল্যাব

নমুনা

{% শব্দার্থে %} {% endverbatim %} {% শব্দার্থে %} {% endverbatim %}