डाइनैमिक सूची को पसंद के मुताबिक बनाना यह Android Jetpack का हिस्सा है.
अपनी ज़रूरतों के हिसाब से, 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
इंस्टेंस में, चुनने की सुविधा जोड़ने के लिए, यह तरीका अपनाएं:
- यह तय करें कि किस तरह के सिलेक्शन बटन का इस्तेमाल करना है. इसके बाद, एक
ItemKeyProvider
बनाएं.चुने गए आइटम की पहचान करने के लिए, तीन मुख्य टाइप का इस्तेमाल किया जा सकता है:
Parcelable
और उसकी सब-क्लास, जैसे किUri
String
Long
चुनने के लिए बटन के टाइप के बारे में ज़्यादा जानकारी के लिए,
SelectionTracker.Builder
देखें. ItemDetailsLookup
लागू करें.RecyclerView
में मौजूद आइटमView
ऑब्जेक्ट को अपडेट करें, ताकि यह पता चल सके कि उपयोगकर्ता ने उन्हें चुना है या नहीं.चुनने के लिए उपलब्ध लाइब्रेरी, चुने गए आइटम के लिए डिफ़ॉल्ट विज़ुअल डेकोरेशन नहीं देती.
onBindViewHolder()
लागू करते समय, यह जानकारी दें. हमारा सुझाव है कि आप यह तरीका अपनाएं:onBindViewHolder()
में,View
ऑब्जेक्ट परtrue
याfalse
के साथ,setActivated()
—नहींsetSelected()
—को कॉल करें. यह इस बात पर निर्भर करता है कि आइटम चुना गया है या नहीं.- चालू होने की स्थिति दिखाने के लिए, व्यू की स्टाइल अपडेट करें. हमारा सुझाव है कि स्टाइल को कॉन्फ़िगर करने के लिए, रंग की स्थिति की सूची वाले संसाधन का इस्तेमाल करें.
ActionMode
का इस्तेमाल करें और उपयोगकर्ता को चुने गए आइटम पर कार्रवाई करने के लिए टूल दें.- अनुवाद की गई सेकंडरी ऐक्शन करें.
SelectionTracker.Builder
का इस्तेमाल करके, सभी चीज़ों को इकट्ठा करें.- गतिविधि के लाइफ़साइकल इवेंट में, चुने गए आइटम शामिल करें.
ItemDetailsLookup
की मदद से, चुनिंदा आइटम की लाइब्रेरी, MotionEvent
के हिसाब से RecyclerView
आइटम की जानकारी ऐक्सेस कर सकती है.
यह ItemDetails
इंस्टेंस के लिए एक फ़ैक्ट्री है. इन इंस्टेंस का बैक अप, RecyclerView.ViewHolder
इंस्टेंस से लिया जाता है या उसमें से निकाला जाता है.
चुने गए विकल्प में बदलाव होने पर सूचना पाने के लिए,
SelectionTracker.SelectionObserver
रजिस्टर करें. जब कोई सेलेक्ट पहली बार बनाया जाता है, तो
उपयोगकर्ता को यह दिखाने के लिए ActionMode
शुरू करें और
सेलेक्ट के हिसाब से कार्रवाइयां उपलब्ध कराएं. उदाहरण के लिए, ActionMode
बार में मिटाएं बटन जोड़ा जा सकता है. साथ ही, चुने गए आइटम हटाने के लिए, बार पर मौजूद बैक ऐरो को कनेक्ट किया जा सकता है. अगर उपयोगकर्ता आखिरी बार चुने गए आइटम को हटा देता है, तो चुने गए आइटम की सूची खाली हो जाने पर ऐक्शन मोड बंद हो जाता है.
इवेंट प्रोसेसिंग पाइपलाइन के आखिर में, लाइब्रेरी यह तय कर सकती है कि उपयोगकर्ता किसी आइटम पर टैप करके उसे चालू करने की कोशिश कर रहा है या किसी आइटम या चुने गए आइटम के सेट को खींचकर छोड़ने की कोशिश कर रहा है. सही लिसनर को रजिस्टर करके, इन पर प्रतिक्रिया दें. ज़्यादा जानकारी के लिए, SelectionTracker.Builder
देखें.
यहां दिए गए उदाहरण में, इन हिस्सों को एक साथ जोड़ने का तरीका बताया गया है:
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()
तरीके से किसी आइटम के चुने गए स्टेटस की जांच नहीं की जा सकती.
गतिविधि के लाइफ़साइकल इवेंट में, चुने गए आइटम की स्थिति को बनाए रखने के लिए, आपके ऐप्लिकेशन को गतिविधि के onSaveInstanceState()
और onRestoreInstanceState()
मैथड से, चुने गए आइटम के ट्रैकर के onSaveInstanceState()
और onRestoreInstanceState()
मैथड को कॉल करना होगा. आपके ऐप्लिकेशन को SelectionTracker.Builder
कन्स्ट्रक्टर को एक यूनीक सिलेक्शन आईडी भी देना होगा. यह आईडी ज़रूरी है, क्योंकि किसी ऐक्टिविटी या फ़्रैगमेंट में एक से ज़्यादा अलग-अलग सूचियां हो सकती हैं. इनमें से किसी भी सूची को चुना जा सकता है. साथ ही, इन सभी सूचियों को सेव की गई स्थिति में बनाए रखना ज़रूरी है.
अन्य संसाधन
ज़्यादा जानकारी के लिए, यहां दिए गए रेफ़रंस देखें.
RecyclerView
का इस्तेमाल करने वाला Sunflower का डेमो ऐप्लिकेशन.- स्क्रोल की जा सकने वाली सूची दिखाने के लिए, RecyclerView का इस्तेमाल करना कोडलैब.
- Android के लिए Kotlin के बुनियादी सिद्धांत: RecyclerView के बुनियादी सिद्धांत कोडलैब.