2011-02-02 29 views
9

我有一个设置CHOICE_MODE_MULTIPLE的ListView。我还有额外的标题来管理 (un)选择所有项目。问题是:这样做是否正确?那么它的作品,但我不知道这是适当的方式。正如你看到下面有一个checkAllCheckBoxes 对象,我传递给头onClickListener()方法。你怎么看?将不胜感激任何回应。正确的方式来检查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控件的头,我不选择一个从中间,h eader仍然被选中并且看起来不太好 – Dan 2011-02-02 15:38:55

回答

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.isItemChecked(0)返回true时,他使用setItemChecked(i,false),所以布尔值被反转。从1开始也不反转第一个值。 – Dalmas 2011-02-02 15:24:23

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 
     } 
    } 
}; 
相关问题