2011-01-17 18 views
6

मैं सूची सूची में आइटम्स की एक सूची फिर से शुरू करना चाहता हूं। GetChildCount() फ़ंक्शन के अजीब व्यवहार की वजह से नीचे दिया गया यह कोड सूची में सभी आइटम को पुन: सक्रिय करने के लिए पर्याप्त नहीं है जो केवल दृश्य आइटम गणना देता है।एंड्रॉइड में सूची दृश्य सूची

for (int i = 0; i < list.getChildCount(); i++) { 
    item = (View)list.getChildAt(i); 
    product = (Product)item.getTag(); 
    // make some visual changes if product.id == someProductId 
} 

मेरे स्क्रीन डिस्प्ले 7 परिणाम और जब वहाँ की सूची में 7 से अधिक आइटम हैं, यह 8 वीं आइटम या तो करने के लिए उपयोग करने के लिए संभव नहीं है .. केवल दृश्यमान आइटम ..

मैं ListIterator का उपयोग करना चाहिए बजाय?

धन्यवाद।

+0

आप डेटा को कैसे पॉप्युलेट कर रहे हैं, यदि आप एडाप्टर का उपयोग कर रहे हैं, तो सूची एडाप्टर – Reno

उत्तर

1

आप अंदर यह जाँच करने के लिए अपनी सूची एडाप्टर के getView() विधि को अनुकूलित, और अपना चेक लगाने की जरूरत है, तो वर्तमान आइटम के आईडी से मेल खाता है:

Product product = items.get(position); 
if(product.id == someProductId) { 
    //make visual changes 
} else { 
    //reset visual changes to default to account for recycled views 
} 

के बाद से आमतौर पर केवल दृश्यमान आइटम केवल एक विशिष्ट समय पर मौजूद हैं, getView जब भी अधिक देखने की जरूरत है कहा जाता है। वे उस समय बनाए जाते हैं, आमतौर पर सूची में अब अदृश्य वस्तुओं से विचारों को पुनर्नवीनीकरण (इसलिए मानदंड मेल नहीं खाते हैं तो आप परिवर्तनों को रीसेट क्यों करना चाहते हैं)।

+0

हाय kcoppock की getCount() विधि को ओवरराइड करें। आपके जवाब के लिए धन्यवाद। अब यह काम करता है जैसा कि मैंने उम्मीद की है कि यह यूआई के दृश्य भाग को तब तक अपडेट नहीं कर रहा है जब तक मैं स्क्रॉल नहीं करता। क्या कोई ऐसा ईवेंट है जिसे मैं यूआई रीफ्रेश करने के लिए ट्रिगर कर सकता हूं। – pocoa

+1

यूप, आप 'listView.notifyDatasetChanged();' कॉल कर सकते हैं। इससे ListAdapter रीफ्रेश होगा, हालांकि, स्क्रॉल करने से पहले भी यह सही होना चाहिए; GetView को प्रत्येक दृश्य के रूप में बुलाया जाता है। क्या आप अपने ListAdapter के कोड को मूल प्रश्न में पोस्ट कर सकते हैं? – kcoppock

+0

आपकी मदद के लिए धन्यवाद। देर से इसे स्वीकार करने के लिए मुझे बहुत खेद है। मैंने सोचा कि मैं पहले ही स्वीकार कर चुका हूं। चीयर्स। – pocoa

0

ListView (7) में विचारों की संख्या एडाप्टर में आइटमों की संख्या से अलग है (जो 7 से अधिक है)। बेस एडाप्टर का उपयोग करने का प्रयास करें।

1

तो @kcoppock ने आपकी पहली समस्या हल की है ऐसा लगता है कि आपको एक और समस्या है। दृश्य आइटम को कैसे अपडेट करें?

  1. इस तरह अपने स्वयं के सूची दृश्य आइटम बनाने:

    public class MyListItem extends RelativeLayout { 
    ... 
    } 
    
    अपने सूची दृश्य आइटम लेआउट फ़ाइल में

    : एंड्रॉयड एसएमएस आवेदन एक ही रास्ता पता चलता

    < MyListItem android:layout_width=.....> 
    ... 
    </ MyListItem > 
    
  2. और अपनी कोड, जब आपका व्यू आइटम देखा जा सकता है, तो डेटा बदले श्रोता के रूप में MyListItem पंजीकृत करें (डेटा आपके ऊपर है)। मेरा मतलब है, जब आपका डेटा बदल गया, तो आप आइटम को सीधे अपडेट कर सकते हैं।

और पढ़ने के लिए एसएमएस एप्लिकेशन स्रोत कोड देखें।