我想禁用/启用列表视图中的所有复选框。 事实上,我希望通过单击顶部复选框来实现全选行为。
谢谢
谢谢
这是最终为我工作的代码,其中我使用了一个游标适配器而不仅仅是ArrayListAdapter
用于我的列表项:
final ListView list = getListView();
for ( int i=0; i< getListAdapter().getCount(); i++ ) {
list.setItemChecked(i, true);
}
list.getChildCount
无法正常工作,因为它似乎只计算了被直接绘制的内容(而非所有在屏幕外的内容),所以childCount
可能只有6或8项,即使整个列表有100多项。此外,我必须使用list.setItemChecked
来使项目“保持选中”——至少在我的情况下,我的列表项是CheckedTextView
的实例。
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或对象以便在其他地方发送/保存数据。
我认为你应该在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();
列表视图中的每个项目都应该像实现了Checkable接口的CheckableRelativeLayout一样具有可选功能。
只需在适配器中添加一个参数即可
Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false);
listview.setAdapter(adapter);
MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true);
listview.setAdapter(adapter);
并在适配器中进行检查
if(chk) {
blue_check.setVisibility(View.VISIBLE);
} else {
blue_check.setVisibility(View.GONE);
}