डाइनैमिक सूची को पसंद के मुताबिक बनाना   यह Android Jetpack का हिस्सा है.

Compose को आज़माएं
Jetpack Compose, Android के लिए सुझाई गई यूज़र इंटरफ़ेस (यूआई) टूलकिट है. Compose में लेआउट इस्तेमाल करने का तरीका जानें.

अपनी खास ज़रूरतों को पूरा करने के लिए, RecyclerView ऑब्जेक्ट को पसंद के मुताबिक बनाया जा सकता है. RecyclerView की मदद से डाइनैमिक सूचियां बनाएं में बताई गई स्टैंडर्ड क्लास, वे सभी सुविधाएं उपलब्ध कराती हैं जिनकी ज़रूरत ज़्यादातर डेवलपर को होती है. कई मामलों में, आपको सिर्फ़ हर व्यू होल्डर के लिए व्यू डिज़ाइन करना होता है. साथ ही, उन व्यू को सही डेटा के साथ अपडेट करने के लिए कोड लिखना होता है. हालांकि, अगर आपके ऐप्लिकेशन की कुछ खास ज़रूरतें हैं, तो स्टैंडर्ड तरीके में कई तरह से बदलाव किया जा सकता है. इस दस्तावेज़ में, पसंद के मुताबिक किए जा सकने वाले कुछ बदलावों के बारे में बताया गया है.

लेआउट में बदलाव करना

RecyclerView, स्क्रीन पर अलग-अलग आइटम को व्यवस्थित करने के लिए, लेआउट मैनेजर का इस्तेमाल करता है. साथ ही, यह तय करता है कि उपयोगकर्ता को अब न दिखने वाले आइटम व्यू का फिर से इस्तेमाल कब करना है. किसी व्यू को फिर से इस्तेमाल करने या रीसाइकल करने के लिए, लेआउट मैनेजर, अडैप्टर से व्यू के कॉन्टेंट को डेटासेट के किसी दूसरे एलिमेंट से बदलने के लिए कह सकता है. इस तरह से व्यू को रीसाइकल करने से, परफ़ॉर्मेंस बेहतर होती है. ऐसा इसलिए होता है, क्योंकि इससे ग़ैर-ज़रूरी व्यू बनाने या ज़्यादा रिसॉर्स खर्च करने वाले findViewById() लुकअप करने से बचा जा सकता है. Android सपोर्ट लाइब्रेरी में तीन स्टैंडर्ड लेआउट मैनेजर शामिल हैं. इनमें से हर एक में, अपनी पसंद के मुताबिक बदलाव करने के कई विकल्प मिलते हैं:

  • LinearLayoutManager: यह आइटम को एक-डाइमेंशन वाली सूची में व्यवस्थित करता है. LinearLayoutManager के साथ RecyclerView का इस्तेमाल करने पर, ListView लेआउट जैसी सुविधाएं मिलती हैं.
  • GridLayoutManager: यह आइटम को दो डाइमेंशन वाले ग्रिड में व्यवस्थित करता है, जैसे कि चेकरबोर्ड पर मौजूद स्क्वेयर. GridLayoutManager के साथ RecyclerView का इस्तेमाल करने पर, GridView लेआउट जैसी सुविधाएं मिलती हैं.
  • StaggeredGridLayoutManager: यह आइटम को दो डाइमेंशन वाले ग्रिड में व्यवस्थित करता है. इसमें हर कॉलम, पहले वाले कॉलम से थोड़ा सा ऑफ़सेट होता है. जैसे, अमेरिकी झंडे पर बने सितारे.

अगर ये लेआउट मैनेजर आपकी ज़रूरतों के मुताबिक नहीं हैं, तो RecyclerView.LayoutManager ऐब्स्ट्रैक्ट क्लास को एक्सटेंड करके, अपना लेआउट मैनेजर बनाया जा सकता है.

आइटम के लिए ऐनिमेशन जोड़ना

जब भी किसी आइटम में बदलाव होता है, तो RecyclerView उसके दिखने के तरीके को बदलने के लिए, ऐनिमेटर का इस्तेमाल करता है. यह ऐनिमेटर एक ऑब्जेक्ट है, जो ऐब्स्ट्रैक्ट RecyclerView.ItemAnimator क्लास को एक्सटेंड करता है. डिफ़ॉल्ट रूप से, RecyclerView ऐनिमेशन दिखाने के लिए DefaultItemAnimator का इस्तेमाल करता है. अगर आपको कस्टम ऐनिमेशन उपलब्ध कराने हैं, तो RecyclerView.ItemAnimator को एक्सटेंड करके, अपना ऐनिमेटर ऑब्जेक्ट तय किया जा सकता है.

सूची में मौजूद आइटम चुनने की सुविधा चालू करना

recyclerview-selection लाइब्रेरी की मदद से, उपयोगकर्ता टच या माउस इनपुट का इस्तेमाल करके, RecyclerView सूची में आइटम चुन सकते हैं. इससे आपको चुने गए आइटम के विज़ुअल प्रज़ेंटेशन पर कंट्रोल बनाए रखने में मदद मिलती है. आपके पास आइटम चुनने के तरीके को कंट्रोल करने वाली नीतियों पर भी कंट्रोल बनाए रखने का विकल्प होता है. जैसे, कौनसे आइटम चुने जा सकते हैं और कितने आइटम चुने जा सकते हैं.

RecyclerView इंस्टेंस में आइटम चुनने की सुविधा जोड़ने के लिए, यह तरीका अपनाएं:

  1. तय करें कि किस तरह की सिलेक्शन कुंजी का इस्तेमाल करना है. इसके बाद, एक ItemKeyProvider बनाएं.

    चुने गए आइटम की पहचान करने के लिए, तीन तरह की कुंजियों का इस्तेमाल किया जा सकता है:

    सिलेक्शन-की के टाइप के बारे में ज़्यादा जानकारी के लिए, SelectionTracker.Builder देखें.

  2. ItemDetailsLookup लागू करें.
  3. ItemDetailsLookup, सिलेक्शन लाइब्रेरी को MotionEvent के हिसाब से RecyclerView आइटम की जानकारी ऐक्सेस करने की अनुमति देता है. यह असल में ItemDetails के इंस्टेंस के लिए एक फ़ैक्ट्री है, जिसका बैक अप RecyclerView.ViewHolder के इंस्टेंस से लिया जाता है या उससे निकाला जाता है.

  4. RecyclerView में मौजूद आइटम View ऑब्जेक्ट को अपडेट करें, ताकि यह पता चल सके कि उपयोगकर्ता ने उन्हें चुना है या नहीं.

    चुने गए आइटम के लिए, सिलेक्शन लाइब्रेरी डिफ़ॉल्ट विज़ुअल डेकोरेशन उपलब्ध नहीं कराती है. onBindViewHolder() लागू करते समय यह जानकारी दें. हमारा सुझाव है कि आप यह तरीका अपनाएं:

    • onBindViewHolder() में, View ऑब्जेक्ट पर setActivated()—not setSelected()—को कॉल करें. इसके लिए, true या false का इस्तेमाल करें. यह इस बात पर निर्भर करता है कि आइटम चुना गया है या नहीं.
    • व्यू की स्टाइलिंग को अपडेट करें, ताकि चालू होने की स्थिति दिख सके. हमारा सुझाव है कि स्टाइलिंग को कॉन्फ़िगर करने के लिए, कलर स्टेट लिस्ट रिसॉर्स का इस्तेमाल करें.
  5. ActionMode का इस्तेमाल करके, उपयोगकर्ता को चुने गए टेक्स्ट पर कार्रवाई करने के लिए टूल उपलब्ध कराएं.
  6. SelectionTracker.SelectionObserver रजिस्टर करें, ताकि चुने गए विकल्प में बदलाव होने पर आपको सूचना मिल सके. जब पहली बार कोई आइटम चुना जाता है, तो उपयोगकर्ता को यह दिखाने के लिए ActionMode शुरू करें. साथ ही, चुने गए आइटम के हिसाब से कार्रवाइयां उपलब्ध कराएं. उदाहरण के लिए, ActionMode बार में 'मिटाएं' बटन जोड़ा जा सकता है. साथ ही, चुने गए आइटम को हटाने के लिए, बार पर मौजूद 'वापस जाएं' ऐरो को कनेक्ट किया जा सकता है. जब चुने गए आइटम की सूची खाली हो जाए, तो ऐक्शन मोड को बंद कर दें. ऐसा तब होता है, जब उपयोगकर्ता आखिरी बार चुने गए आइटम को हटा देता है.

  7. इंटरप्रेट की गई कोई भी सेकंडरी कार्रवाई करना.
  8. इवेंट प्रोसेसिंग पाइपलाइन के आखिर में, लाइब्रेरी यह तय कर सकती है कि उपयोगकर्ता किसी आइटम पर टैप करके उसे चालू करने की कोशिश कर रहा है या किसी आइटम या चुने गए आइटम के सेट को खींचकर छोड़ने की कोशिश कर रहा है. सही लिसनर को रजिस्टर करके, इन इंटरप्रिटेशन पर प्रतिक्रिया दें. ज़्यादा जानकारी के लिए, SelectionTracker.Builder देखें.

  9. SelectionTracker.Builder की मदद से, सभी चीज़ों को एक साथ जोड़ें.
  10. यहां दिए गए उदाहरण में, इन हिस्सों को एक साथ जोड़ने का तरीका बताया गया है:

    Kotlin

        var tracker = SelectionTracker.Builder(
            "my-selection-id",
            recyclerView,
            StableIdKeyProvider(recyclerView),
            MyDetailsLookup(recyclerView),
            StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build()
        

    Java

        SelectionTracker tracker = new SelectionTracker.Builder<>(
                "my-selection-id",
                recyclerView,
                new StableIdKeyProvider(recyclerView),
                new MyDetailsLookup(recyclerView),
                StorageStrategy.createLongStorage())
                .withOnItemActivatedListener(myItemActivatedListener)
                .build();
        

    SelectionTracker इंस्टेंस बनाने के लिए, आपके ऐप्लिकेशन को वही RecyclerView.Adapter देना होगा जिसका इस्तेमाल आपने RecyclerView को SelectionTracker.Builder के लिए शुरू करने के लिए किया था. इस वजह से, SelectionTracker इंस्टेंस बनाने के बाद, इसे अपने RecyclerView.Adapter में इंजेक्ट करें. अगर ऐसा नहीं है, तो onBindViewHolder() तरीके से किसी आइटम के चुने गए स्टेटस की जांच नहीं की जा सकती.

  11. चुने गए हिस्से को गतिविधि पूरी होने की प्रोसेस के इवेंट में शामिल करें.
  12. गतिविधि के लाइफ़साइकल इवेंट के दौरान, चुने गए आइटम की स्थिति को बनाए रखने के लिए, आपके ऐप्लिकेशन को गतिविधि के onSaveInstanceState() और onRestoreInstanceState() तरीकों से, सिलेक्शन ट्रैकर के onSaveInstanceState() और onRestoreInstanceState() तरीकों को कॉल करना होगा. आपके ऐप्लिकेशन को SelectionTracker.Builder कंस्ट्रक्टर को एक यूनीक सिलेक्शन आईडी भी देना होगा. इस आईडी की ज़रूरत इसलिए होती है, क्योंकि किसी गतिविधि या फ़्रैगमेंट में एक से ज़्यादा अलग-अलग सूचियां हो सकती हैं. इन सभी सूचियों को सेव की गई स्थिति में बनाए रखना ज़रूरी होता है.

अन्य संसाधन

ज़्यादा जानकारी के लिए, यहां दिए गए रेफ़रंस देखें.