डाइनैमिक सूची को पसंद के मुताबिक बनाना यह 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
का इस्तेमाल करता है. - स्क्रोल की जा सकने वाली सूची दिखाने के लिए, RecyclerView का इस्तेमाल करना कोडलैब.
- Android के लिए Kotlin की बुनियादी बातें: RecyclerView की बुनियादी बातें कोडलैब.