2011-02-02 12 views
9

मेरे पास सेट CHOICE_MODE_MULTIPLE सेट के साथ एक सूची दृश्य है। मेरे पास (un) को सभी आइटमों का चयन करने के लिए अतिरिक्त शीर्षलेख भी है। सवाल यह है: क्या ऐसा करने का सही तरीका है? वैसे यह काम करता है, हालांकि मुझे यकीन नहीं है कि यह उचित तरीका है। जैसा कि आप नीचे देखते हैं वहां एक चेकएल चेकबॉक्स ऑब्जेक्ट है जिसे मैं हेक्लिक ऑनक्लिक लिस्टनर() विधि पर पास करता हूं। तुम क्या सोचते हो? किसी भी प्रतिक्रिया के लिए आभारी होंगे।ListView में सभी चेकबॉक्स देखने के लिए सही तरीका है?

private OnClickListener checkAllCheckboxes = new OnClickListener(){ 
    public void onClick(View v) { 
     ListView lv = getListView(); 
     int size = getListAdapter().getCount(); 
     if(lv.isItemChecked(0)){ 
      for(int i = 0; i<=size; i++){ 
       lv.setItemChecked(i, false); 
      } 
     } else { 
      for(int i = 0; i<=size; i++){ 
       lv.setItemChecked(i, true); 
      } 
     } 
    } 

}; 
+0

प्रतिक्रियाएं, अच्छा अंक के लिए धन्यवाद दोस्तों। खैर मैं भी सोच रहा हूँ शायद के रूप में अगर सभी आइटम का चयन किया जाता है कि यह बेहतर होगा केवल शीर्षक पर बजाय listView को, कि श्रोता जोड़ने के लिए और मैं से एक का चयन रद्द करें मध्य, एच eader अभी भी चुना गया है और यह अच्छी तरह से नहीं दिखता है – Dan

उत्तर

9

आप इस तरह अपने कोड का अनुकूलन कर सकते हैं:

बदलें

if(lv.isItemChecked(0)){ 
    for(int i = 0; i<=size; i++){ 
     lv.setItemChecked(i, false); 
    } 
} else { 
    for(int i = 0; i<=size; i++){ 
     lv.setItemChecked(i, true); 
    } 
} 

द्वारा

boolean check = lv.isItemChecked(0); 
    for(int i = 0; i <= size; i++) 
     lv.setItemChecked(i, !check); 
2

यह एक ही बात करना चाहिए और एक छोटे से अधिक संक्षिप्त है। पाश 1 से शुरू क्योंकि आप शीर्ष लेख के जाँच की राज्य पुनर्स्थापित करने के लिए नहीं करना चाहते, और हैडर सूचकांक 0.

private OnClickListener checkAllCheckboxes = new OnClickListener(){ 
    public void onClick(View v) { 
     ListView lv = getListView(); 
     int size = lv.getAdapter().getCount(); 
     boolean checked = lv.isItemChecked(0); 
     for(int i=1; i<size; i++) { 
      lv.setItemChecked(i, checked); 
     } 
    } 

}; 
+0

मुझे यकीन नहीं है कि यह सही है। अपने कोड में जब lv.isItem चेक (0) सत्य लौटाता है तो वह setItem चेक (i, false) का उपयोग करता है ताकि बूलियन मान उलट दिया जा सके। 1 से शुरू होने से पहले मान को उलट नहीं किया जाता है। – Dalmas

0

जहां लंबाई सरणी में सरणी लंबाई है और chkbox सभी चेकबॉक्स का चयन है।

chkbox.setOnCheckedChangeListener (नई OnCheckedChangeListener() {

 @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // TODO Auto-generated method stub 
      if(chkbox.isChecked()) 
      { 

       for(i=0;i<length;i++) 
       { 

            lv.setItemChecked(i, true); 
       } 

      } 
      else 
      { 
       for(i=0;i<length;i++) 
       { 

            lv.setItemChecked(i, false); 
       } 


      } 

     } 
    }); 
0

रॉबी के समाधान मेरे लिए काम किया। मैं उस में एक अतिरिक्त बनाने के लिए है के रूप में। adapter अद्यतन भी आवश्यक है, अन्यथा जब आप सूची स्क्रॉल checkbox होगा बहाल।

private OnClickListener checkAllCheckboxes = new OnClickListener(){ 
    public void onClick(View v) { 
     ListView lv = getListView(); 
     int size = lv.getAdapter().getCount(); 
     boolean checked = lv.isItemChecked(0); 
     for(int i=1; i<size; i++) { 
      lv.setItemChecked(i, checked); 

      CustomListItem it = CustomAdapter.get(i); 
      it.setChk(check); // set value in adapter 
     } 
    } 
}; 
संबंधित मुद्दे