2012-05-29 13 views
5

मैंने ListView.indexOfChild (व्यू व्यू) विधि का उपयोग करके यह जांचने की कोशिश की है कि ListView में एक निर्दिष्ट शीर्षलेख दृश्य है या नहीं, लेकिन कभी-कभी यह -1 देता है जब ListView में वास्तव में एक निर्दिष्ट शीर्षलेख होता है। क्या इसके लिए जांच करने का कोई बेहतर तरीका है?आप कैसे जांचते हैं कि ListView में एक निर्दिष्ट शीर्षलेख है या नहीं?

उत्तर

17

'शीर्षक के द्वारा तुम्हारा मतलब तो एक वास्तविक हैडर addHeaderView(...) किसी भी विधि का उपयोग करके जोड़ा, तो आप बस getHeaderViewsCount() का उपयोग करके जोड़ा हेडर की संख्या प्राप्त कर सकते हैं।

वैकल्पिक रूप से, अगर मुझे सही याद है, ListView उसके एडाप्टर को HeaderViewListAdapter के अंदर लपेट देगा यदि इसमें हेडर और/या फ़ूटर हैं। आप उपरोक्त के समान संख्या को पुनर्प्राप्त करने के लिए अपने getHeadersCount() का उपयोग कर सकते हैं।


संपादित करें: आप की जाँच करने के लिए एक विशिष्ट हैडर जोड़ा जाता है कि क्या चाहते हैं, आप उस के लिए HeaderViewListAdapter क्वेरी करने के लिए सक्षम होना चाहिए। इसके खिलाफ जांच करने के लिए आपको कुछ प्रकार के मानदंडों की आवश्यकता होगी।

उदाहरण के लिए, यदि आपके ListView में 3 हेडर हैं, तो आप पहले तीन आइटम से अधिक पुनरावृति कर सकते हैं (आप शायद HeaderListViewAdapter से सीधे या तो उन्हें प्राप्त कर सकते हैं, या ListView के getItemAtPosition(...) विधि का उपयोग) और अगर एक मेल देखने के मानदंड। इस 'मिलान' करने का सबसे आसान तरीका शायद addHeaderView(...) विधि का उपयोग कर शीर्षलेख जोड़ना है जो Object पैरामीटर भी लेता है। आप कई शीर्षकों के बीच अंतर करने के लिए मूल रूप से कुछ भी आपूर्ति कर सकते हैं, जाहिर है कि डेटा ऑब्जेक्ट अलग हैं। जैसे आप बस एक स्ट्रिंग में पास कर सकते हैं।

इस डेटा के साथ, आप पहले 3 पदों के लिए getItem(...)/getItemAtPosition(...) पर कॉल कर सकते हैं और जांच सकते हैं कि क्या लौटाया जाता है। डेटा के लिए स्ट्रिंग का उपयोग करने का लाभ यह है कि प्रत्येक जावा ऑब्जेक्ट toString() विधि लागू करता है, जिसे आप सीधे .equals(..) तुलना के लिए शोषण कर सकते हैं।

वैकल्पिक रूप से, आप प्रतिबिंब इस्तेमाल कर सकते हैं वास्तविक mHeaderViewInfos सदस्य चर के ahold पाने के लिए (जो सिर्फ एक ArrayList<ListView.FixedViewInfo> है) और का उपयोग करें कि सशर्त तर्क के लिए।

+0

कूल मुझे उस विधि के बारे में पता नहीं था, जिसे जानना उपयोगी था। हालांकि, मेरे कुछ सूची दृश्यों में एकाधिक शीर्षलेख होंगे। क्या कोई तरीका है कि मैं बता सकता हूं कि उनमें कोई विशिष्ट शीर्षलेख है या नहीं? – Matthew

+0

ठीक है, मैं वास्तव में प्रश्न शीर्षक से इसे उठा सकता था। वैसे भी, कृपया मेरे मूल उत्तर के अतिरिक्त देखें। इससे आपको अपने रास्ते पर मदद करनी चाहिए। –

+0

अद्यतन प्रतिक्रिया के लिए धन्यवाद। यह इसके बारे में जाने के लिए एक अच्छा तरीका लगता है। वैकल्पिक रूप से, जब भी मैं हेडर व्यू को हटाता हूं तो जब भी मैं addHeaderView (v) को कॉल करता हूं और उस झंडे को साफ़ करता हूं, तो मैंने एक बुलियन ध्वज 'हेडर एक्सएडड' को सही करने के लिए बहुत ही सरल दृष्टिकोण लिया है। – Matthew

संबंधित मुद्दे

 संबंधित मुद्दे