2011-02-09 18 views
14

मैं क्या है: मैं कस्टम पंक्तियों के साथ एक ListView है, एक चेकबॉक्स प्रत्येक पंक्ति में & दो TextViews रही है। मेरे पास "सभी का चयन करें" के लिए एक बटन है।एक ListView के सभी आइटम का चयन करें (कस्टम उस में चेकबॉक्स के साथ पंक्ति)

मुझे क्या चाहिए: मैं चाहता हूं कि जब मैं बटन क्लिक करता हूं, तो सूची दृश्य में सभी चेकबॉक्स चेक/अनचेक हो जाते हैं।

समस्या क्या है: "सभी का चयन करें" बटन पर क्लिक करें। मैं यह कर रहा हूं:

public void OnClickSelectAllButton(View view) 
{ 
    ListView l = getListView(); 
    int count = l.getCount(); 
    for(int i=0; i<count; ++i) 
    { 
     ViewGroup row = (ViewGroup)l.getChildAt(i); 
     CheckBox check = (CheckBox) row.findViewById(R.id.checkBoxID); 
     check.setChecked(true); // true for select all and false for unselect all etc.. 
    } 
} 

यहाँ l.getChildAt (i) मुझे दृश्यमान आइटम केवल दे रहा है। और जब सूचकांक दृश्य वस्तुओं से बाहर हो जाता है, तो समस्या होती है। मैं सूची में सभी चेकबॉक्स को देखना चाहता हूं, केवल दृश्यमान नहीं। क्योंकि ListView एडाप्टर विचारों पुनः उपयोग कर लेता

+0

संभव डुप्लिकेट [एंड्रॉइड चेकबॉक्स सूचीदृश्य सभी का चयन करें (अक्षम/सक्षम)] (http://stackoverflow.com/questions/4553186/android-checkbox-listview-select-all-disable-enable) –

उत्तर

21

यह हो जाएगा देखा है। जिस तरह से आप करने का प्रयास कर रहे हैं वह गलत है। मुझे नहीं लगता कि आपको कभी भी सूचीदृश्य बच्चों के माध्यम से सूचीदृश्य पंक्तियों तक पहुंच प्राप्त करनी चाहिए।

अपनी गतिविधि में एक चर, कि वर्तमान स्थिति (boolean checkAll) का आयोजन करेगा परिचय दें। उपयोगकर्ता बटन दबाता है, तो यह सच करने के लिए "checkAll" सेट, और अपने ListView के एडाप्टर पर (arrayadapter के लिए) notifyDataSetChanged(), या requery() (CursorAdapter के लिए) कॉल करना होगा। एडाप्टर के getView() विधि में इस ध्वज के लिए एक चेक प्रस्तुत करें, इसलिए if (checkAll) {check the check box}

+0

एलेक्स, धन्यवाद विचार। इसने काम कर दिया। चीयर्स =) – Khawar

0

मुझे लगता है कि आपको UI थ्रेड से यह लंबे समय तक चलने वाला कार्य चलाना चाहिए। आप OnClickListener में बटन क्लिक करते हैं:

new Thread(new Runnable() { 
         @Override 
         public void run() { 
          for (int i = 0; i < list.getAdapter().getCount(); i++) { 
           final int position = i; 
           mHandler.post(new Runnable() { 
            @Override 
            public void run() { 
             list.setItemChecked(pos, true); 
            } 
           }); 
          } 
         } 
        }).start();  

और OnCreate() में:

this.mHandler = new Handler(); 

सूची दृश्य में प्रत्येक आइटम CheckableRelativeLayout कि चेक करने योग्य इंटरफ़ेस लागू करता है की तरह चेक करने योग्य होना चाहिए।

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

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