ListView et recyclage des view VS coche des checkbox
Ci dessous, le schéma illustrant le recyclage des view d'une ListView sous Android, tiré de l'article suivant :Parfois, lorsque l'on souhaite désactiver / rendre non clickable certains champs, on applique directement dans la méthode getView() de l'adapter de la listView, la désactivation du champ en question (généralement en se basant sur la position de l'élement dans la liste).
// On souhait desactiver le premier bouton d'une listView
if ((position > 0) {
viewHolder.unButton.setEnabled(false);
}
Avec cette implémentation, tous les boutons et pas uniquement ceux de la première ligne, seront désactivés.En effet, la listView recycle chaque item, dans notre cas à travers un objet appelé ViewHolder, afin de ne pas les désérialiser le XML à chaque fois. Le problème vient du fait que le viewHolder est recyclé pour chaque item et donc garde son état précédent (enabled = false). Pour corriger ce problème, il faut gérer à la fois l'activation et la désactivation :
// On souhait desactiver le premier bouton d'une listView
if ((position > 0) {
viewHolder.unButton.setEnabled(false);
} else {
viewHolder.unButton.setEnabled(true);
}
