2011-02-09 13 views
14

私が持っているもの:私はCheckBox &の各行に2つのTextViewsを持つカスタム行を持つListViewを持っています。 「すべて選択」のボタンがあります。ListBoxのすべての項目を選択します(チェックボックス付きのカスタム行)

私が望むもの:ボタンをクリックすると、ListViewのすべてのCheckBoxがチェック/チェック解除されます。

問題:「すべて選択」ボタンのOnClickにあります。私はこれをやっている:

ここ
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)は私の目に見えるアイテムのみを与えています。また、目に見える項目から索引が外れると、問題が発生します。私はリスト内のすべてのCheckBoxを確認したいだけでなく、目に見えるものをチェックしたい。

+0

[Androidチェックボックスリストビューをすべて選択(無効/有効)](http://stackoverflow.com/questions/4553186/android-checkbox-listview-select-all-disable-enable) –

答えて

21

を見てきました。あなたがしようとしている方法は間違っています。リストビューの子を通してリストビューの行にアクセスする必要はないと思います。

あなたのアクティビティに、現在の状態(boolean checkAll)を保持する変数を導入します。ユーザーがボタンを押すと、 "checkAll"をtrueに設定し、notifyDataSetChanged()(arrayadapterの場合)またはrequery()(cursoradapterの場合)をListViewのアダプタで呼び出す必要があります。アダプタの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のようなチェック可能でなければなりません。

関連する問題