डाइनैमिक सूची को पसंद के मुताबिक बनाना यह Android Jetpack का हिस्सा है.
RecyclerView ऑब्जेक्ट को अपनी ज़रूरत के हिसाब से पसंद के मुताबिक बनाया जा सकता है. RecyclerView के साथ डाइनैमिक सूचियां बनाना
में बताई गई स्टैंडर्ड क्लास, वे सभी सुविधाएं उपलब्ध कराती हैं जिनकी ज़्यादातर डेवलपर को ज़रूरत होती है. कई मामलों में, आपको सिर्फ़ हर व्यू होल्डर के लिए व्यू डिज़ाइन करना होता है. साथ ही, उन व्यू को सही डेटा के साथ अपडेट करने के लिए कोड लिखना होता है. हालांकि, अगर आपके ऐप्लिकेशन की कुछ खास ज़रूरतें हैं, तो स्टैंडर्ड तरीके को कई तरह से बदला जा सकता है.
इस दस्तावेज़ में, पसंद के मुताबिक बनाने के कुछ तरीकों के बारे में बताया गया है.
लेआउट में बदलाव करना
RecyclerView , स्क्रीन पर अलग-अलग आइटम की पोज़िशन तय करने और उन आइटम व्यू को फिर से इस्तेमाल करने के लिए लेआउट मैनेजर का इस्तेमाल करता है जो अब उपयोगकर्ता को नहीं दिखते. किसी व्यू को फिर से इस्तेमाल करने—या रीसाइकल करने के लिए, लेआउट
मैनेजर अडैप्टर से व्यू के कॉन्टेंट को डेटासेट के किसी दूसरे एलिमेंट से बदलने के लिए कह सकता है. इस तरह से व्यू को रीसाइकल करने से परफ़ॉर्मेंस बेहतर होती है. ऐसा इसलिए, क्योंकि इससे गैर-ज़रूरी व्यू बनाने या महंगे findViewById() लुकअप करने से बचा जा सकता है. Android Support Library में तीन स्टैंडर्ड लेआउट मैनेजर शामिल हैं.
इनमें से हर एक में, पसंद के मुताबिक बनाने के कई विकल्प मिलते हैं:
LinearLayoutManager: आइटम को एक डाइमेंशन वाली सूची में व्यवस्थित करता है.RecyclerViewके साथLinearLayoutManagerका इस्तेमाल करने पर,ListViewलेआउट जैसी सुविधाएं मिलती हैं.GridLayoutManager: आइटम को दो डाइमेंशन वाले ग्रिड में व्यवस्थित करता है. जैसे, चेकरबोर्ड पर मौजूद स्क्वेयर. के साथRecyclerViewका इस्तेमाल करने पर,GridViewलेआउट जैसी सुविधाएं मिलती हैं.GridLayoutManagerStaggeredGridLayoutManager: आइटम को दो डाइमेंशन वाले ग्रिड में व्यवस्थित करता है. इसमें हर कॉलम, उससे पहले वाले कॉलम से थोड़ा ऑफ़सेट होता है. जैसे, अमेरिकी झंडे पर मौजूद तारे.
अगर ये लेआउट मैनेजर आपकी ज़रूरतों के हिसाब से नहीं हैं, तो RecyclerView.LayoutManager ऐब्स्ट्रैक्ट क्लास को बढ़ाकर अपना लेआउट मैनेजर बनाया जा सकता है.
आइटम में ऐनिमेशन जोड़ना
जब भी किसी आइटम में बदलाव होता है, तो RecyclerView उसके दिखने के तरीके में बदलाव करने के लिए ऐनिमेटर का इस्तेमाल करता है. यह ऐनिमेटर, RecyclerView.ItemAnimator ऐब्स्ट्रैक्ट क्लास को बढ़ाने वाला ऑब्जेक्ट होता है. डिफ़ॉल्ट रूप से, RecyclerView, ऐनिमेशन उपलब्ध कराने के लिए DefaultItemAnimator का इस्तेमाल करता है. अगर आपको पसंद के मुताबिक ऐनिमेशन उपलब्ध कराने हैं, तो RecyclerView.ItemAnimator को बढ़ाकर अपना ऐनिमेटर ऑब्जेक्ट तय किया जा सकता है.
सूची के आइटम चुनने की सुविधा चालू करना
The
recyclerview-selection
लाइब्रेरी की मदद से, उपयोगकर्ता टच
या माउस इनपुट का इस्तेमाल करके, RecyclerView सूची में आइटम चुन सकते हैं. इससे, चुने गए आइटम के विज़ुअल प्रज़ेंटेशन पर आपका कंट्रोल बना रहता है. साथ ही, उन नीतियों पर भी आपका कंट्रोल बना रहता है जो चुनने के तरीके को कंट्रोल करती हैं. जैसे, किन आइटम को चुना जा सकता है और कितने आइटम चुने जा सकते हैं.
RecyclerView इंस्टेंस में चुनने की सुविधा जोड़ने के लिए, यह तरीका अपनाएं:
- तय करें कि चुनने के लिए किस तरह की कुंजी का इस्तेमाल करना है. इसके बाद,
ItemKeyProviderबनाएं.चुने गए आइटम की पहचान करने के लिए, तीन तरह की कुंजियों का इस्तेमाल किया जा सकता है:
Parcelableऔर इसकी सबक्लास, जैसे किUriStringLong
चुने जाने वाली कुंजी के टाइप के बारे में ज़्यादा जानकारी के लिए,
SelectionTracker.Builderदेखें. - लागू करें
ItemDetailsLookup. - आइटम
Viewऑब्जेक्ट कोRecyclerViewमें अपडेट करें, ताकि यह पता चल सके कि उपयोगकर्ता उन्हें चुनता है या नहीं.चुने गए आइटम के लिए, चुनने वाली लाइब्रेरी कोई डिफ़ॉल्ट विज़ुअल डेकोरेशन उपलब्ध नहीं कराती. `onBindViewHolder()` लागू करते समय, यह सुविधा उपलब्ध कराएं
onBindViewHolder(). हम यह तरीका अपनाने का सुझाव देते हैं:onBindViewHolder()में,Viewऑब्जेक्ट परsetActivated()को कॉल करें. आइटम चुने जाने परtrueऔर न चुने जाने परfalseका इस्तेमाल करें. notsetSelected()का इस्तेमाल **न** करें.- ऐक्टिवेट की गई स्थिति को दिखाने के लिए, व्यू की स्टाइलिंग अपडेट करें. हम स्टाइलिंग कॉन्फ़िगर करने के लिए, कलर स्टेट लिस्ट रिसॉर्स का इस्तेमाल करने का सुझाव देते हैं.
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();
इंस्टेंस बनाने के लिए, आपके ऐप्लिकेशन को वही
RecyclerView.Adapter
देना होगा जिसका इस्तेमाल, RecyclerView को शुरू करने के लिए किया जाता है
SelectionTracker.Builder.SelectionTracker इसलिए, SelectionTracker इंस्टेंस बनाने के बाद, इसे अपने
RecyclerView.Adapter में इंजेक्ट करें. ऐसा न करने पर, किसी आइटम की चुनी गई स्थिति की जांच onBindViewHolder() तरीके से नहीं की जा सकती.
ऐक्टिविटी लाइफ़साइकल इवेंट के दौरान, चुने गए आइटम की स्थिति बनाए रखने के लिए, आपके ऐप्लिकेशन को ऐक्टिविटी के onSaveInstanceState()
और onRestoreInstanceState()
तरीकों से, चुनने वाले ट्रैकर के onSaveInstanceState()
और onRestoreInstanceState()
तरीकों को कॉल करना होगा. आपके ऐप्लिकेशन को चुनने के लिए एक यूनीक आईडी भी
SelectionTracker.Builder कंस्ट्रक्टर को देना होगा. यह आईडी ज़रूरी है, क्योंकि
किसी ऐक्टिविटी या फ़्रैगमेंट में, चुनने के लिए एक से ज़्यादा अलग-अलग सूचियां हो सकती हैं,
इन सभी को सेव की गई स्थिति में बनाए रखना ज़रूरी है.
अन्य संसाधन
ज़्यादा जानकारी के लिए, ये रेफ़रंस देखें.
- Sunflower
डेमो ऐप्लिकेशन, जिसमें
RecyclerViewका इस्तेमाल किया गया है. - स्क्रोल की जा सकने वाली सूची दिखाने के लिए, RecyclerView का इस्तेमाल करना कोडलैब.
- Android Kotlin की बुनियादी बातें: RecyclerView की बुनियादी बातें कोडलैब.