Android Checkbox listview选择全部(禁用/启用)

时间:2010-12-29 10:11:09

标签: android listview checkbox

我想禁用/启用listview中的所有复选框。 infact想通过单击顶部复选框来选择所有行为。

感谢

4 个答案:

答案 0 :(得分:26)

这最终对我有用,我正在使用游标适配器,而不仅仅是我的列表项ArrayListAdapter

final ListView list = getListView();
for ( int i=0; i< getListAdapter().getCount(); i++ ) {
        list.setItemChecked(i, true);
}

list.getChildCount不起作用,因为它似乎只计算立即绘制的内容(不是屏幕外的所有内容),因此当整个列表为100时,childCount可能只有6或8项更多物品。另外,我必须使用list.setItemChecked来让项目“保持检查” - 至少在我的情况下,我的列表项是CheckedTextView的实例。

答案 1 :(得分:20)

for(int i=0; i < listView.getChildCount(); i++){
    RelativeLayout itemLayout = (RelativeLayout)listView.getChildAt(i);
    CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.MyListViewCheckBox);
    cb.setChecked(true);
}

您需要编辑此代码以处理启用和禁用,但我希望您明白这一点!

此外,这只会检查每个复选框,确保从列表中返回ID或对象,以便将数据发送/保存到其他位置。

答案 2 :(得分:0)

只需在适配器中添加一个参数

Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false);
listview.setAdapter(adapter);

on select all按钮单击侦听器添加此代码

MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true);
listview.setAdapter(adapter);

并检查adpater

if(chk) {
    blue_check.setVisibility(View.VISIBLE);
} else {
    blue_check.setVisibility(View.GONE);
}

答案 3 :(得分: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一样可以实现Checkable接口。