我有一个ListView,设置为CHOICE_MODE_MULTIPLE。我还有额外的标题来管理 (联合国)选择所有项目。问题是:这样做是否正确?嗯它有效,但我不确定这是正确的方式。如下所示,有一个checkAllCheckBoxes 我传递给头onClickListener()方法的对象。你怎么看?对任何回复都会感激不尽。
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 :(得分:9)
您可以像这样优化代码:
替换
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);
}
}
通过
boolean check = lv.isItemChecked(0);
for(int i = 0; i <= size; i++)
lv.setItemChecked(i, !check);
答案 1 :(得分:2)
这应该做同样的事情,并且更简洁一些。循环从1开始,因为您不想重置标头的已检查状态,标头是索引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 :(得分:0)
其中Length是数组中的数组长度,chkbox是select all复选框。
chkbox.setOnCheckedChangeListener(new 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);
}
}
}
});
答案 3 :(得分:0)
Robby的解决方案为我工作。因为我必须补充一点。还需要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
}
}
};