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