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

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

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

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

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

  • 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 ऑब्जेक्ट पर true या false के साथ, setActivated()नहीं setSelected()—को कॉल करें. यह इस बात पर निर्भर करता है कि आइटम चुना गया है या नहीं.
    • चालू होने की स्थिति दिखाने के लिए, व्यू की स्टाइल अपडेट करें. हमारा सुझाव है कि स्टाइल को कॉन्फ़िगर करने के लिए, रंगों की स्थिति की सूची देने वाले रिसॉर्स का इस्तेमाल करें.
  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 कन्स्ट्रक्टर को एक यूनीक सिलेक्शन आईडी भी देना होगा. यह आईडी इसलिए ज़रूरी है, क्योंकि किसी गतिविधि या फ़्रैगमेंट में, चुनने लायक एक से ज़्यादा अलग-अलग सूची हो सकती हैं. इन सभी को अपनी सेव की गई स्थिति में बनाए रखना ज़रूरी है.

अन्य संसाधन

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