Reputation: 2406
I am new to Java and Andriod development.
I have a view within my app which contains a ListView
I then have a custom Adapter which inherits from an ArrayAdapter
within the view in the getView method I return a row which contains some text and a checkbox
now so far this all works great my list is populated and I can check my items, and all the events seem to fire as expected.
My problem that I am having is that I check the first 3 items and then I notice that the 11th, 12th and 13th items are checked and as I scroll I see that at regular intervals other checkboxes also seem to be checked in the same pattern.
If I check about 10 checkboxes then it will end up checking all the items in the list of about 80...
can anyone explain what I have done wrong?
I dont think any code will help explain this as I do not set the checkstate of the checkbox anywhere, this is all handled itself, so the fact items are being checked is puzzling me.
Thanks in advance
Upvotes: 0
Views: 223
Reputation: 1498
This is expected behavior. ListView reuses views in the adapter.
So what you want is to keep a Set
of "selected items" and add an item or remove it when the CheckBox
is clicked and then in your getView add the following code:
if(mSelected.contains(getItem(position)) {
checkBox.setChecked(true);
} else {
checkBox.setChecked(false);
}
This way when the row is reused the CheckBox
will be the proper status.
Upvotes: 1
Reputation: 632
This is happening because Android recycles list items for performance purposes, here you have the solution of this problem: ListView reusing views when ... I don't want it to
Hope to help :)
Upvotes: 3