我想禁用/启用listview中的所有复选框。 infact想通过单击顶部复选框来选择所有行为。
感谢
答案 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接口。