2011-02-02 7 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

みんなありがとうを復元します。まあ、私はまた、すべての項目が選択され、私はから1の選択を解除しているかのように、多分ヘッダのみに代わりにListViewコントロールするためにそのリスナーを追加する方が良いだろう思ったんだけど中央、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 
     } 
    } 
}; 
関連する問題