पेजिंग 3, पेजिंग लाइब्रेरी के पुराने वर्शन से काफ़ी अलग है. इस वर्शन में बेहतर सुविधाएं और आम तौर पर इस्तेमाल किए जाने वाले पतों के बारे में जानकारी दी गई है पेजिंग 2 के इस्तेमाल में आने वाली परेशानियों का पता लगाना है. अगर आपका ऐप्लिकेशन पहले से ही किसी पुराने वर्शन का इस्तेमाल करता है पेजिंग लाइब्रेरी का एक वर्शन है, तो माइग्रेट करने के बारे में ज़्यादा जानने के लिए यह पेज पढ़ें पेजिंग 3.
अगर पेजिंग 3, पेजिंग लाइब्रेरी का पहला वर्शन है, तो आपकी जानकारी के लिए, पेज लोड करें और दिखाएं सामान्य इस्तेमाल के लिए डेटा जानकारी.
पेजिंग 3 पर माइग्रेट करने के फ़ायदे
पेजिंग 3 में ये सुविधाएं शामिल हैं जो पहले नहीं थीं लाइब्रेरी के वर्शन:
- Kotlin कोरूटीन और फ़्लो के लिए फ़र्स्ट-क्लास सपोर्ट.
- RxJava
Single
या GuavaListenableFuture
से कनेक्ट नहीं होने पर लोड करने की सुविधा के साथ काम नहीं करता प्रिमिटिव. - रिस्पॉन्सिव यूज़र इंटरफ़ेस (यूआई) डिज़ाइन के लिए पहले से मौजूद लोड होने की स्थिति और गड़बड़ी के सिग्नल, जिनमें शामिल है फिर से कोशिश करें और काम करने के तरीके को रीफ़्रेश करें.
- डेटा स्टोर करने की जगह की लेयर में सुधार, जिसमें रद्द करने के लिए सहायता और डेटा सोर्स का आसान इंटरफ़ेस.
- प्रज़ेंटेशन लेयर, सूची सेपरेटर, कस्टम पेज में सुधार ट्रांसफ़ॉर्म करता है और स्टेटस के हेडर और फ़ुटर लोड करता है.
अपने ऐप्लिकेशन को पेजिंग 3 पर माइग्रेट करें
पेजिंग 3 पर पूरी तरह से माइग्रेट करने के लिए, आपको तीनों अहम कॉम्पोनेंट को माइग्रेट करना होगा पेज 2 से:
DataSource
क्लासPagedList
PagedListAdapter
हालांकि, पेजिंग 3 के कुछ कॉम्पोनेंट पिछले वर्शन के साथ काम करते हैं
पेजिंग के अलग-अलग वर्शन उपलब्ध हैं. खास तौर पर,
पेजिंग से मिला PagingSource
एपीआई
3, इनके लिए डेटा सोर्स हो सकता है:
LivePagedListBuilder
और RxPagedListBuilder
पुराने वर्शन से लिए गए. इसी तरह, Pager
एपीआई पुराने वर्शन का इस्तेमाल कर सकता है
DataSource
ऑब्जेक्ट,
asPagingSourceFactory()
तरीका. इसका मतलब है कि आपके पास ये चीज़ें हैं:
माइग्रेशन के विकल्प:
- आप अपने
DataSource
कोPagingSource
पर माइग्रेट कर सकते हैं, लेकिन बाकी को छोड़ सकते हैं पेजिंग लागू करने की प्रक्रिया में कोई बदलाव नहीं हुआ. - अपने
PagedList
औरPagedListAdapter
को माइग्रेट करने के बाद भी, पुरानाDataSource
एपीआई. - अगर आपको अपने ऐप्लिकेशन को पूरी तरह से इस पर माइग्रेट करना है, तो पेजिंग लागू करने की पूरी प्रक्रिया को माइग्रेट करें: पेजिंग 3.
इस पेज के सेक्शन में, हर लेयर पर पेजिंग कॉम्पोनेंट को माइग्रेट करने का तरीका बताया गया है तीन सबसे सही तरीक़े यहाँ दिए गए हैं.
DataSource क्लास
इस सेक्शन में, किसी पुराने पेज को माइग्रेट करने के लिए ज़रूरी सभी बदलावों के बारे में बताया गया है
PagingSource
का इस्तेमाल करने के लिए लागू करें.
PageKeyedDataSource
, PositionalDataSource
, और ItemKeyedDataSource
पेजिंग 2 से, सभी पेजिंग 3 में PagingSource
एपीआई में जोड़े जाते हैं. कॉन्टेंट बनाने
सभी पुराने एपीआई क्लास के कॉन्टेंट लोड करने के तरीकों को एक साथ
PagingSource
में load()
तरीका. इससे कोड का डुप्लीकेट कम हो जाता है, क्योंकि
पुराने एपीआई क्लास को लागू करने के लिए, लोड करने के तरीकों में लॉजिक
अक्सर एक जैसा होता है.
पेज 3 में, लोड करने के तरीके के सभी पैरामीटर, LoadParams
से बदल दिए जाते हैं
सील्ड क्लास, जिसमें हर लोड टाइप के लिए सब-क्लास शामिल हैं. अगर आपको
अपने load()
तरीके में लोड टाइप के बीच अंतर करें. साथ ही, देखें कि
LoadParams
की सब-क्लास को इसमें पास किया गया: LoadParams.Refresh
,
LoadParams.Prepend
या LoadParams.Append
.
PagingSource
लागू करने के बारे में ज़्यादा जानने के लिए, डेटा तय करना देखें
स्रोत.
बटन रीफ़्रेश करें
PagingSource
लागू करने के लिए यह तय किया जाना चाहिए कि रीफ़्रेश
लोड किए गए पेज डेटा के बीच में मौजूद होता है. ऐसा करने के लिए
getRefreshKey()
सबसे हाल ही के के तौर पर state.anchorPosition
का इस्तेमाल करके सही शुरुआती कुंजी को मैप करने के लिए
ऐक्सेस किया गया इंडेक्स.
Kotlin
// 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 }
Java
// 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; }
Java
// 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
पर ऑपरेटर के तौर पर लागू होते हैं. अगर आपने
आप अपनी पेज वाली सूची को बदलने के लिए पिछली सूची में दिए गए किसी तरीके का इस्तेमाल करते हैं,
आपको अपने ट्रांसफ़ॉर्मेशन लॉजिक को DataSource
से
आपके नए PagingSource
का इस्तेमाल करके, Pager
बनाते समय PagingData
.
पेजिंग 3 का इस्तेमाल करके, पेज किए गए डेटा में बदलाव लागू करने के बारे में ज़्यादा जानने के लिए, यहां देखें डेटा स्ट्रीम बदलना.
पेज वाली सूची
इस सेक्शन में, किसी पुराने पेज को माइग्रेट करने के लिए ज़रूरी सभी बदलावों के बारे में बताया गया है
पेजिंग 3 में Pager
और PagingData
का इस्तेमाल करने के लिए लागू करें.
PagedListBuilder क्लास
पेज 2 में, मौजूदा PagedList
की जगह PagingData
का इस्तेमाल किया गया है. इस पर माइग्रेट करने के लिए
PagingData
, आपको इन्हें अपडेट करना होगा:
- पेजिंग कॉन्फ़िगरेशन
PagedList.Config
सेPagingConfig
पर चला गया है. LivePagedListBuilder
औरRxPagedListBuilder
को एक साथ मिला दिया गया है सिंगलPager
क्लास.Pager
, अपनी.flow
प्रॉपर्टी के साथ, मॉनिटर किया जा सकने वालाFlow<PagingData>
दिखाता है. RxJava और LiveData के वैरिएंट, एक्सटेंशन प्रॉपर्टी के तौर पर भी उपलब्ध होते हैं. को स्थिर विधियों के माध्यम से Java से कॉल किया जा सकता है और इन्हेंpaging-rxjava*
औरpaging-runtime
मॉड्यूल.
Kotlin
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)
Java
// 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);
Java
// 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);
PagingData
ऑब्जेक्ट की रिऐक्टिव स्ट्रीम को सेट अप करने के बारे में ज़्यादा जानने के लिए,
पेजिंग 3, इसकी स्ट्रीम सेट अप करें
PagingData.
लेयर वाले सोर्स के लिए बाउंड्री कॉलबैक
पेजिंग 3 में,
RemoteMediator
बदला गया
नेटवर्क और डेटाबेस से पेजिंग करने के लिए हैंडलर के तौर पर PagedList.BoundaryCallback
.
नेटवर्क और डेटाबेस से RemoteMediator
का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए
पेजिंग 3, Android पेजिंग देखें
कोडलैब (कोड बनाना सीखना).
PagedListAdapter
इस सेक्शन में, किसी पुराने पेज को माइग्रेट करने के लिए ज़रूरी सभी बदलावों के बारे में बताया गया है
PagingDataAdapter
या AsyncPagingDataDiffer
क्लास का इस्तेमाल करने के लिए लागू करें
पेजिंग 3 से.
पेजिंग 3 में, PagingData
के नए रिस्पॉन्स को मैनेज करने के लिए PagingDataAdapter
की सुविधा मिलती है
स्ट्रीम. अगर ऐसा नहीं है, तो PagedListAdapter
और PagingDataAdapter
के लिए वैल्यू एक ही है
इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. PagedListAdapter
से PagingDataAdapter
पर माइग्रेट करने के लिए, बदलें
इसके बजाय, PagingDataAdapter
की अवधि बढ़ाने के लिए, PagedListAdapter
को लागू करें.
PagingDataAdapter
के बारे में ज़्यादा जानने के लिए, RecyclerView को तय करने का तरीका देखें
अडैप्टर से कनेक्ट किया गया है.
AsyncPagedListDiffer
अगर फ़िलहाल, कस्टम RecyclerView.Adapter
का इस्तेमाल किया जा रहा है, तो
AsyncPagedListDiffer
, एपीआई का इस्तेमाल करने के लिए,
इसके बजाय AsyncPagingDataDiffer
पेजिंग 3 में दिया गया है:
Kotlin
AsyncPagingDataDiffer(diffCallback, listUpdateCallback)
Java
new AsyncPagingDataDiffer(diffCallback, listUpdateCallback);
Java
new AsyncPagingDataDiffer(diffCallback, listUpdateCallback);
अन्य संसाधन
पेजिंग लाइब्रेरी के बारे में ज़्यादा जानने के लिए, इन अतिरिक्त संसाधनों को देखें:
कोड लैब
सैंपल
- Android आर्किटेक्चर कॉम्पोनेंट पेजिंग सैंपल
- डेटाबेस और नेटवर्क के साथ Android आर्किटेक्चर के कॉम्पोनेंट पेजिंग करना सैंपल
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- पेज किया गया डेटा लोड करना और दिखाना
- पेज किया गया डेटा इकट्ठा करना
- नेटवर्क और डेटाबेस से पेज