पेज वाली सूचियां दिखाएं

यह गाइड पेजिंग लाइब्रेरी के आधार पर बनाई गई है, में बताया गया है. इसमें बताया गया है कि आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में उपयोगकर्ताओं के लिए जानकारी की सूची दिखाएगा, खास तौर पर जब जानकारी में बदलाव.

यूज़र इंटरफ़ेस (यूआई) को अपने व्यू मॉडल से कनेक्ट करना

कनेक्ट करने के लिए, 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, आपको अनलोड किए गए डेटा को दिखाने के लिए डिफ़ॉल्ट वैल्यू देनी होगी.
  • एक जैसे साइज़ के आइटम व्यू ज़रूरी हैं: अगर सूची आइटम के साइज़, इवेंट के हिसाब से बदल सकते हैं जैसे कि सोशल नेटवर्किंग अपडेट, आइटम के बीच क्रॉसफ़ेडिंग. अच्छा नहीं लग रहा है. इस मामले में हमारा सुझाव है कि आप प्लेसहोल्डर को बंद कर दें.

सुझाव या राय दें

इन संसाधनों की मदद से, हमारे साथ अपने सुझाव, शिकायत या राय शेयर करें:

समस्या को ट्रैक करने वाला टूल
समस्याओं की शिकायत करें, ताकि हम गड़बड़ियां ठीक कर सकें.

अन्य संसाधन

पेजिंग लाइब्रेरी के बारे में ज़्यादा जानने के लिए, इन संसाधनों को देखें.

सैंपल

कोड लैब

वीडियो