यह गाइड पेजिंग लाइब्रेरी के आधार पर बनाई गई है, में बताया गया है. इसमें बताया गया है कि आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में उपयोगकर्ताओं के लिए जानकारी की सूची दिखाएगा, खास तौर पर जब जानकारी में बदलाव.
यूज़र इंटरफ़ेस (यूआई) को अपने व्यू मॉडल से कनेक्ट करना
कनेक्ट करने के लिए,
LiveData<PagedList>
से
PagedListAdapter
, जैसा दिखाया गया है
कोड स्निपेट में:
Kotlin
class ConcertActivity : AppCompatActivity() { private val adapter = ConcertAdapter() // Use the 'by viewModels()' Kotlin property delegate // from the activity-ktx artifact private val viewModel: ConcertViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); viewModel.concerts.observe(this, Observer { adapter.submitList(it) }) } }
Java
public class ConcertActivity extends AppCompatActivity { private ConcertAdapter adapter = new ConcertAdapter(); private ConcertViewModel viewModel; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(this).get(ConcertViewModel.class); viewModel.concertList.observe(this, adapter::submitList); } }
डेटा सोर्स से, आपको
PagedList
, गतिविधि भेजता है
एडॉप्टर से जोड़ सकते हैं. कॉन्टेंट बनाने
PagedListAdapter
लागू करने की प्रोसेस से तय होता है कि अपडेट की गिनती कैसे की जाती है. साथ ही, यह अपने-आप
पेजिंग और सूची का अंतर. इसलिए,
ViewHolder
सिर्फ़ किसी खास आइटम के साथ बाइंड करना ज़रूरी है:
Kotlin
class ConcertAdapter() : PagedListAdapter<Concert, ConcertViewHolder>(DIFF_CALLBACK) { override fun onBindViewHolder(holder: ConcertViewHolder, position: Int) { val concert: Concert? = getItem(position) // Note that "concert" is a placeholder if it's null. holder.bindTo(concert) } companion object { private val DIFF_CALLBACK = ... // See Implement the diffing callback section. } }
Java
public class ConcertAdapter extends PagedListAdapter<Concert, ConcertViewHolder> { protected ConcertAdapter() { super(DIFF_CALLBACK); } @Override public void onBindViewHolder(@NonNull ConcertViewHolder holder, int position) { Concert concert = getItem(position); // Note that "concert" can be null if it's a placeholder. holder.bindTo(concert); } private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK = ... // See Implement the diffing callback section. }
PagedListAdapter
पेज लोड इवेंट को हैंडल करने के लिए,
PagedList.Callback
ऑब्जेक्ट है. उपयोगकर्ता के स्क्रोल करने पर, PagedListAdapter
कॉल करता है
PagedList.loadAround()
दिए गए कीवर्ड के आधार पर,
PagedList
को
इसे
DataSource
.
अलग-अलग कॉलबैक लागू करें
नीचे दिए गए सैंपल में, इसे मैन्युअल तौर पर लागू किया गया है
areContentsTheSame()
,
इसमें काम के ऑब्जेक्ट फ़ील्ड की तुलना की जाती है:
Kotlin
private val DIFF_CALLBACK = object : DiffUtil.ItemCallback<Concert>() { // The ID property identifies when items are the same. override fun areItemsTheSame(oldItem: Concert, newItem: Concert) = oldItem.id == newItem.id // If you use the "==" operator, make sure that the object implements // .equals(). Alternatively, write custom data comparison logic here. override fun areContentsTheSame( oldItem: Concert, newItem: Concert) = oldItem == newItem }
Java
private static DiffUtil.ItemCallback<Concert> DIFF_CALLBACK = new DiffUtil.ItemCallback<Concert>() { @Override public boolean areItemsTheSame(Concert oldItem, Concert newItem) { // The ID property identifies when items are the same. return oldItem.getId() == newItem.getId(); } @Override public boolean areContentsTheSame(Concert oldItem, Concert newItem) { // Don't use the "==" operator here. Either implement and use .equals(), // or write custom data comparison logic here. return oldItem.equals(newItem); } };
आपके अडैप्टर में आइटम की तुलना करने की परिभाषा शामिल होती है, इसलिए अडैप्टर
नया PagedList
ऑब्जेक्ट होने पर, इन आइटम में हुए बदलावों का अपने-आप पता लगाता है
लोड हो गया. इस वजह से, अडैप्टर आपके कैंपेन के अंदर ही असरदार आइटम ऐनिमेशन ट्रिगर करता है
RecyclerView
ऑब्जेक्ट.
किसी दूसरे अडैप्टर टाइप का इस्तेमाल करके फ़र्क़ करना
अगर आपको Google Analytics 4 प्रॉपर्टी से इनहेरिट नहीं करना है
PagedListAdapter
—जैसे
जब आप ऐसी लाइब्रेरी का उपयोग कर रहे होते हैं जो अपना अडैप्टर प्रदान करती है—तो भी आप
लाइब्रेरी अडैप्टर के अलग-अलग फ़ंक्शन के लिए, सीधे
AsyncPagedListDiffer
ऑब्जेक्ट है.
अपने यूज़र इंटरफ़ेस (यूआई) में प्लेसहोल्डर मुहैया कराएं
ऐसे मामलों में, जहां आप चाहते हैं कि आपका ऐप्लिकेशन खत्म होने से पहले आपका यूज़र इंटरफ़ेस (यूआई) एक सूची दिखाए
डेटा फ़ेच कर रहे हैं, तो आप अपने उपयोगकर्ताओं को प्लेसहोल्डर सूची आइटम दिखा सकते हैं. कॉन्टेंट बनाने
PagedList
इस केस को इनके ज़रिए हैंडल करता है
डेटा लोड होने तक, सूची के आइटम के डेटा को null
के तौर पर दिखाया जाएगा.
प्लेसहोल्डर के ये फ़ायदे हैं:
- स्क्रोलबार के लिए सहायता:
PagedList
इससे आपको पता चलता है कि आइटम सूची मेंPagedListAdapter
. यह जानकारी की मदद से अडैप्टर, एक स्क्रोलबार बना सकता है, जो सूची. नए पेज लोड होने पर, स्क्रोलबार जंप नहीं होता, क्योंकि आपकी सूची आकार नहीं बदलता है. - लोडिंग स्पिनर ज़रूरी नहीं है: क्योंकि सूची का साइज़ पहले से ही पता है, उपयोगकर्ताओं को सूचित करने की कोई ज़रूरत नहीं है कि ज़्यादा आइटम लोड हो रहे हैं. प्लेसहोल्डर वे उस जानकारी के बारे में बताते हैं.
हालांकि, प्लेसहोल्डर के लिए सहायता जोड़ने से पहले, इन बातों का ध्यान रखें पहले से तय की गई शर्तों को ध्यान में रखें:
- काउंटेबल डेटा सेट की ज़रूरत है: के इंस्टेंस
रूम से
DataSource
परसिस्टेंस लाइब्रेरी की मदद से, उनके आइटम. अगर आपकी ओर से कस्टम लोकल स्टोरेज सलूशन या सिर्फ़ नेटवर्क का इस्तेमाल किया जा रहा है, तो डेटा आर्किटेक्चर, हालांकि, यह पता लगाना महंगा या नामुमकिन हो सकता है कि कितने आइटम अपना डेटा सेट शामिल करें. - अनलोड किए गए आइटम के लिए, अडैप्टर की ज़रूरत होगी: अडैप्टर या
मुद्रास्फीति के लिए सूची तैयार करने के लिए इस्तेमाल की जाने वाली प्रज़ेंटेशन व्यवस्था के लिए
शून्य सूची में मौजूद आइटम को हैंडल करते हैं. उदाहरण के लिए, जब डेटा को किसी
ViewHolder
, आपको अनलोड किए गए डेटा को दिखाने के लिए डिफ़ॉल्ट वैल्यू देनी होगी. - एक जैसे साइज़ के आइटम व्यू ज़रूरी हैं: अगर सूची आइटम के साइज़, इवेंट के हिसाब से बदल सकते हैं जैसे कि सोशल नेटवर्किंग अपडेट, आइटम के बीच क्रॉसफ़ेडिंग. अच्छा नहीं लग रहा है. इस मामले में हमारा सुझाव है कि आप प्लेसहोल्डर को बंद कर दें.
सुझाव या राय दें
इन संसाधनों की मदद से, हमारे साथ अपने सुझाव, शिकायत या राय शेयर करें:
- समस्या को ट्रैक करने वाला टूल
- समस्याओं की शिकायत करें, ताकि हम गड़बड़ियां ठीक कर सकें.
अन्य संसाधन
पेजिंग लाइब्रेरी के बारे में ज़्यादा जानने के लिए, इन संसाधनों को देखें.
सैंपल
कोड लैब
वीडियो
- Android Jetpack: RecyclerView और पेजिंग की मदद से, अनंत सूचियां मैनेज करना (Google I/O '18)
- Android Jetpack: पेजिंग
आपके लिए सुझाव
- ध्यान दें: JavaScript बंद होने पर लिंक टेक्स्ट दिखता है
- पेज 2 लाइब्रेरी की खास जानकारी
- पेज 3 पर माइग्रेट करना
- पेज किया गया डेटा इकट्ठा करना