পেজিং 3 পেজিং লাইব্রেরির আগের সংস্করণ থেকে উল্লেখযোগ্যভাবে আলাদা। এই সংস্করণটি বর্ধিত কার্যকারিতা প্রদান করে এবং পেজিং 2 ব্যবহার করার সাথে সাধারণ অসুবিধাগুলিকে সমাধান করে৷ যদি আপনার অ্যাপ ইতিমধ্যেই পেজিং লাইব্রেরির একটি পূর্ববর্তী সংস্করণ ব্যবহার করে, তাহলে পেজিং 3-এ স্থানান্তরিত করার বিষয়ে আরও জানতে এই পৃষ্ঠাটি পড়ুন৷
যদি পেজিং 3 পেজিং লাইব্রেরির প্রথম সংস্করণ হয় যা আপনি আপনার অ্যাপে ব্যবহার করছেন, তাহলে মৌলিক ব্যবহারের তথ্যের জন্য পৃষ্ঠাযুক্ত ডেটা লোড এবং প্রদর্শন দেখুন।
পেজিং 3 এ স্থানান্তরিত করার সুবিধা
পেজিং 3-এ নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে যা লাইব্রেরির পূর্ববর্তী সংস্করণগুলিতে উপস্থিত ছিল না:
- Kotlin coroutines এবং Flow এর জন্য প্রথম-শ্রেণীর সমর্থন।
- RxJava
Single
বা GuavaListenableFuture
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);
অতিরিক্ত সম্পদ
পেজিং লাইব্রেরি সম্পর্কে আরও জানতে, নিম্নলিখিত অতিরিক্ত সংস্থানগুলি দেখুন:
কোডল্যাব
নমুনা
- অ্যান্ড্রয়েড আর্কিটেকচার উপাদান পেজিং নমুনা
- ডেটাবেস এবং নেটওয়ার্ক নমুনা সহ অ্যান্ড্রয়েড আর্কিটেকচার উপাদান পেজিং
আপনার জন্য প্রস্তাবিত
- দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক টেক্সট প্রদর্শিত হয়
- পৃষ্ঠাযুক্ত ডেটা লোড এবং প্রদর্শন করুন
- পৃষ্ঠাযুক্ত ডেটা সংগ্রহ করুন
- নেটওয়ার্ক এবং ডাটাবেস থেকে পৃষ্ঠা