Aller au contenu

ListView avec check box


kakashi_sharingan

Recommended Posts

Bonjour,

J'ai un listview avec des check box que je rempli avec un adapter

La listview contient environ 50 lignes et seulement 6 sont visibles.

Mon premier problème est quand je coche la première ligne visible par exemple, je déscend dans la listview et il me coche à répétition le 7ème, 13ème et ainsi de suite.

Comment faire et d'ou viens cette erreur !!!

Le deuxieme problème est quand je clicque sur un bouton qui parcour ma listview et regarde les checkbox chécké, pour récupérer la position d'une view contenant ma checkbox dans ma listview

J'arrive a récupérer la position de l'élément visible, mais pas des autres éléments

Si quelqu'un aurait une solution ou un exemple de listview avec checkbox dont tout les éléments de la liste ne sont pas visible. et ou on controle la sélection ou non de tout les checkbox de la liste

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Aîe! Voilà ce que m'inspire ton problème. J'ai eu exactement le même il y a quelque temps, des cases cochées qui ne devait pas l'être, etc.

Ma première solution a été de stocker dans une liste toutes les cases cochées, du coup à l'affichage de celles-ci je les coche ou décoches en fonction. Malheureusement ça n'a pas fonctionné comme je le souhaitais :P

Au final j'ai créé ma propre ListView "à la volée" et on y voit que du feu, aucune différences.

Je n'ai plus en tête le code pour ça mais en gros:

J'ai dans mon xml d'interface une ScrollView contenant un LinearLayout (orientation="vertical"). Parcours pas liste d'éléments à ajouter à la ListView et j'ajoute autant de Layout à mon LinearLayout qu'il y a d'éléments. Personnellement, j'ai aussi créé à la volée les checkbox et editText dont j'avais besoin, mais tu peux surement utiliser un modèle du layout entièrement fait en xml à la place.

Il y a peut être d'autres solutions, mais il y a quelques mois j'en ai trouvé aucune me satisfaisant. Bon courage.

Lien vers le commentaire
Partager sur d’autres sites

Une ListView n'instancie pas autant de View (correspondant à un élément) qu'il y a d'éléments. Au contraire, elle n'en instancie que ce qui est nécessaire pour l'affichage, et fait un recyclage de ces vues lorsqu'un élément disparaît de l'écran pour la réutiliser pour un nouvel élément.

D'où ce problème de répétition de cases cochées sur les lignes 7, 13, ... (ce qui prouve bien que la vue de la première ligne est réutilisée pour la 7ème, et ainsi de suite...).

Pour pouvoir contrôler la sélection de checkbox dans ta ListView, il faut que l'information 'élement checké' soit portée par l'élément stocké dans ton Adapter, et non par la CheckBox de la View, celle-ci n'étant valide que le temps que la ligne est visible à l'écran. Pour cela, il faut gérer la mise à jour de la CheckBox par le biais de la méthode getView et/ou bindView (selon le type d'Adapter), et via un Listener sur la CheckBox pour répercuter le changement d'état dans ton élément présent dans ton Adapter. Ce qu'il faut bien comprendre, c'est que la ListView n'est qu'une représentation graphique, partielle qui plus est, de tes données, mais ce n'est pas elle qui porte l'information

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...