kakashi_sharingan Posted February 25, 2011 Share Posted February 25, 2011 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 Link to comment Share on other sites More sharing options...
Lord Yu Posted February 25, 2011 Share Posted February 25, 2011 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. Link to comment Share on other sites More sharing options...
chpil Posted February 25, 2011 Share Posted February 25, 2011 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 Link to comment Share on other sites More sharing options...
kakashi_sharingan Posted February 26, 2011 Author Share Posted February 26, 2011 Merci de vos réponses, j'y vois plus claire maintenant. Je vais essayer les propositions que vous m'avez conseiller. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.