Correct way to check all checkboxes in ListView?
I have a ListView with set CHOICE_MODE_MULTIPLE. I also have additional header to manage (un)开发者_运维知识库selecting all the items. The question is : is it correct way to do that? Well it works, however I'm not sure thats proper way. As you see below there is an checkAllCheckBoxes object which I pass to header onClickListener() method. What do you think? Would be grateful for any responses.
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);
}
}
}
};
You can optimize your code like this :
Replace
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);
}
}
by
boolean check = lv.isItemChecked(0);
for(int i = 0; i <= size; i++)
lv.setItemChecked(i, !check);
This should do the same thing and is a little more concise. The loop starts at 1 because you don't want to reset the checked state of the header, and the header is index 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);
}
}
};
where Length is array length in the array and chkbox is select all checkbox.
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);
}
}
}
});
Robby's solution worked for me. As i have to make an addition in that. adapter
update is also required, otherwise when you scroll the list checkbox
will restore.
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
}
}
};
精彩评论