J'ai un ListView
, dont chacun des item
contient un ToggleButton
. Après l'avoir basculé puis fait défiler vers le haut ou vers le bas, le ListView recycle les vues et donc certains des autres reflètent l'état vérifié du ToggleButton
. Je ne veux pas de ça. Comment puis-je l'empêcher?
Réponses
Trop de publicités?Vous pouvez utiliser un HashMap
pour enregistrer l'état de vos boutons :
private Map<Integer,Boolean> listMapBoolean = new HashMap<Integer,Boolean>();
toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
listMapBoolean.put(position, true);
} else {
listMapBoolean.put(position, false);
}
}
});
et après avoir gonflé la vue, vous lisez le HashMap
pour voir s'il a été coché ou non :
for (Entry<Integer, Boolean> entry : listMapBoolean.entrySet()) {
if (entry.getKey().equals(i)) {
if(entry.getValue()) {
System.out.println("ToggleButton is checked!");
} else {
System.out.println("ToggleButton is not checked!");
}
}
}
Je ne sais pas si cela vous aide. J'ai également eu des problèmes avec le recyclage de mon EditText
dans mon ListView
.
Autant que je sache, Android réutilise les composants. Lorsque vous faites défiler la liste vers le haut et vers le bas, elle est actualisée et vos composants sont à nouveau créés. Pour enregistrer l'état du bouton bascule, vous devrez maintenir son état par programmation.
Pouvez-vous envoyer votre code?