Domanda

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

È stato utile?

Soluzione

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 :)

Altri suggerimenti

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top