रीसाइक्लर व्यू लाइब्रेरी ने हाल ही में नया SortedList
क्लास जोड़ा है। मान लीजिए मेरे पास एक कॉलबैक है जो compare()
विधि लागू करता है जो समय के साथ बदल सकता है, यानी अंतर्निहित तुलनाकर्ता को स्विच किया जा सकता है। अपने डेटा का पूरी तरह से रिसॉर्ट करने के लिए SortedList
बताने का सबसे अच्छा तरीका क्या है?रीसाइक्लिंग व्यू की सॉर्टेडलिस्ट
उत्तर
यहाँ उस पर अपने ही ले (Kotlin में लिखा) है:
list.beginBatchedUpdates()
val indices = (0..list.size() - 1).toArrayList()
while (!indices.isEmpty()) {
val i = indices.first()
val item = list.get(i)
list.recalculatePositionOfItemAt(i)
[suppress("USELESS_CAST_STATIC_ASSERT_IS_FINE")]
indices.remove(list.indexOf(item) as Any) //cast to disambiguate remove()
}
list.endBatchedUpdates()
आप देखते हैं, मैं recalculatePositionOfItemAt()
तो हर आइटम केवल एक बार सहारा है और कोई आइटम के लिए हर कॉल के बाद नया सूचकांक ट्रैकिंग कर रहा हूँ कर सकते हैं छोड़ दिया गया है
यह काम करता है लेकिन वास्तव में अपर्याप्त लगता है क्योंकि recalculatePositionOfItemAt()
निकालने के लिए दो बार अंतर्निहित सरणी का आकार बदल देगा और फिर आइटम को पढ़ेगा। indexOf
तब भी एक नई बाइनरी खोज करेगा, हालांकि इंडेक्स पहले ही ज्ञात है।
संपादित करें: यदि आइटम बराबर की तुलना में एक अनंत लूप का कारण बनता है।
वैकल्पिक दृष्टिकोण (सभी हटाने, तो सभी को जोड़ने):
list.beginBatchedUpdates()
val copy = (list.size() - 1 downTo 0).map { list.removeItemAt(it) }
copy.forEach { list.add(it) }
list.endBatchedUpdates()
दुर्भाग्य से, वहाँ इस के लिए कोई एपीआई है। बस स्रोत कॉपी करें और उस विधि को स्वयं जोड़ें। बैकिंग डेटा सिर्फ एक सरणी है ताकि आप उस पर Arrays.sort को कॉल कर सकें, फिर डेटा सेट को सूचित करें कॉल करें। ट्रैकिंग परिवर्तन छोटे नहीं होते हैं जब पूरी दुनिया बदलती है तो क्रमबद्ध सूची के लिए वास्तव में उपयुक्त मामला नहीं है। कृपया b.Android.com पर एक सुविधा अनुरोध बनाएं।
हाँ, मुझे एहसास हुआ कि 5 से अधिक वस्तुओं पर एक पूर्ण रिसॉर्टिंग एनिमेटिंग वास्तव में अजीब लग रहा है। –
बीटीडब्ल्यू, आपको स्रोत की प्रतिलिपि बनाने की आवश्यकता नहीं है। चूंकि अंतर्निहित सरणी mData पैकेज निजी है, इसलिए आप उसी पैकेज में एक सहायक के माध्यम से इसका उपयोग कर सकते हैं। –
- 1. रीसाइक्लिंग व्यू
- 2. रीसाइक्लिंग व्यू एंड्रॉइड
- 3. एंड्रॉइड डेटा बाइंडिंग लाइब्रेरी के साथ रीसाइक्लिंग व्यू में सॉर्टेडलिस्ट का उपयोग कैसे करें?
- 4. रीसाइक्लिंग व्यू आइटम को हटाने
- 5. रीसाइक्लिंग व्यू में आइटम का चयन करें
- 6. रीसाइक्लिंग व्यू के अंदर कार्डव्यू अतिरिक्त मार्जिन
- 7. रीसाइक्लिंग व्यू के साथ डुप्लिकेट फ्रैगमेंट्स
- 8. सी # लिंक रिटर्न सॉर्टेडलिस्ट
- 9. रीसाइक्लिंग व्यू में पूरी सामग्री पर ज़ूम कैसे करें?
- 10. रीसाइक्लिंग दृश्य/सूची दृश्य
- 11. एंड्रॉइड रीसाइक्लिंग व्यू पर स्ट्रिंग्स को कैसे सॉर्ट करें?
- 12. मैं रीसाइक्लिंग व्यू में ग्रिडलाउट एनीमेशन का उपयोग कैसे करूं?
- 13. रीसाइक्लिंग व्यू के नीचे प्रोग्रामेटिक रूप से स्क्रॉल कैसे करें?
- 14. रीसाइक्लिंग दृश्य
- 15. क्या मुझे रीसाइक्लिंग व्यू के लिए ग्रैडल निर्भरता की आवश्यकता है?
- 16. कार्डव्यू और रीसाइक्लिंग व्यू को मिनीएसडीकेवर्सन एल की आवश्यकता क्यों है?
- 17. ViewPager + रीसाइक्लिंग विचार?
- 18. सॉर्टेडलिस्ट बनाम सॉर्टेड डिक्शनरी बनाम सॉर्ट करें()
- 19. एंड्रॉइड रीसाइक्लिंग प्राप्त करना प्रतिक्रिया मूल घटक
- 20. रीसाइक्लिंग में एंड्रॉइड सेंटरिंग आइटम
- 21. रीसाइक्लिंग व्यू - स्क्रॉल करते समय आइटम दृश्य का आकार बदलना (प्रभावशाली कैरोसेल के लिए)
- 22. एंड्रॉइड में रीसाइक्लिंग व्यू के आइटम्स के बीच गतिशील दृश्य कैसे जोड़ें?
- 23. मैं रीसाइक्लिंग व्यू के आइटम के प्रवेश द्वार को कैसे एनिमेट (स्लाइड) कर सकता हूं?
- 24. रीसाइक्लिंग व्यू के अक्षम स्पर्श ईवेंट (उपयोगकर्ता स्पर्श को रोकने के लिए)?
- 25. एंड्रॉइड सामग्री समर्थन पुस्तकालयों के लिए, मुझे कार्डव्यू और रीसाइक्लिंग व्यू कहां मिल सकता है?
- 26. रीसाइक्लिंग व्यू पर वर्तमान फ़ोकस किए गए आइटम के आकार को कैसे बढ़ाया जाए?
- 27. ड्रब और "रीसाइक्लिंग ऑब्जेक्ट" अपवाद
- 28. रीसाइक्लिंग दृश्य दृश्य रीसाइक्लिंग नहीं देखें यदि दृश्य गणना छोटी है
- 29. स्क्रॉलिंग रीसाइक्लिंग व्यू का उपयोग करते समय ViewPager में टूलबार को कैसे छिपाना है?
- 30. रीसाइक्लिंग व्यू में आप ऑनक्लिक लिस्टनर का उपयोग कैसे करते हैं?
अगर मुझे लगता है, 'startBatchedUpdates() ',' realculatePositionOfItemAt() '(प्रत्येक आइटम के लिए), और' endBatchedUpdates() ', लेकिन यह केवल एपीआई के आधार पर अनुमान है। – CommonsWare
सबसे खराब केस परिदृश्य, http://developer.android.com/reference/android/support/v7/widget/util/SortedListAdapterCallback.html कॉलबैक में तत्व बदलने के तरीकों के तरीके हैं, लेकिन सही उत्तर शायद @ कॉमन्सवेयर ' जवाब – EpicPandaForce
यह एक बुरी शुरुआत नहीं है। लेकिन प्रत्येक इंडेक्स के लिए realculatePositionOfItemAt() को कॉल करना पूरी तरह से इसका सहारा नहीं लेगा। सूचकांक बदल जाएंगे जिससे कुछ वस्तुओं को छोड़ दिया जा सकता है। –