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

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

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

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

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

  • LinearLayoutManager: आइटम को एक डाइमेंशन वाली सूची में व्यवस्थित करता है. LinearLayoutManager के साथ RecyclerView का इस्तेमाल करने पर, ListView लेआउट जैसी सुविधाएं मिलती हैं.
  • GridLayoutManager: यह आइटम को दो डाइमेंशन वाली ग्रिड में व्यवस्थित करता है. जैसे, चेकरबोर्ड पर मौजूद स्क्वेयर. RecyclerView के साथ GridLayoutManager का इस्तेमाल करने पर, 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 कंस्ट्रक्टर को एक यूनीक सिलेक्शन आईडी भी देना होगा. इस आईडी की ज़रूरत इसलिए होती है, क्योंकि किसी गतिविधि या फ़्रैगमेंट में एक से ज़्यादा अलग-अलग, चुनी जा सकने वाली सूचियां हो सकती हैं, इन सभी को सेव की गई स्थिति में बनाए रखना ज़रूरी है.

अन्य संसाधन

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