2011-02-02 6 views
9

CHOICE_MODE_MULTIPLE이 설정된 ListView가 있습니다. 또한 모든 항목을 선택하여 (un)을 관리하기위한 추가 헤더가 있습니다. 문제는 올바른 방법인가? 잘 작동하지만, 나는 그것이 적절한 방법으로 확신하지 못합니다. 아래에서 보듯이 header onClickListener() 메소드에 전달하는 checkAllCheckBoxes 객체가 있습니다. 어떻게 생각해? 어떤 반응에도 감사 할 것입니다.ListView에서 모든 확인란을 선택하는 올바른 방법은 무엇입니까?

이 같은 일을해야

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

고마워합니다. 그럼 난 모든 항목이 선택되는 경우로는, 단지 헤더 대신 목록보기에 해당 리스너를 추가하는 것이 좋습니다 것 어쩌면 궁금하네요 그리고 난에서 하나의 선택을 취소 중간, h eader가 여전히 선택되고 잘 보이지 않습니다. – Dan

답변

9

이 같은 코드를 최적화 할 수 있습니다. 당신은 헤더의 체크 상태를 재설정하지 않기 때문에 루프는 1에서 시작하고, 헤더 길이 배열의 배열 길이를하고 chkbox 모든 체크 박스를 선택입니다 인덱스 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); 
     } 
    } 

}; 
2

이에 의해

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); 
    } 
} 

를 교체하고 좀 더 간결 :

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

나는 이것이 옳은지 잘 모르겠다. 그의 코드에서 lv.isItemChecked (0)가 true를 반환하면 setItemChecked (i, false)를 사용하므로 부울 값이 반대로됩니다. 1에서 시작하면 첫 번째 값을 반대로하지 않습니다. – Dalmas

0

입니다.

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 
     } 
    } 
}; 
관련 문제