|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() |
Bonjour,
Voici un nouveau tutoriel qui vous permettra de créer une listView avec des checkbox et de gérer les événements de ces dernières. http://dsilvera.developpez.com/tutor...er-evenements/ Vous pouvez poser vos questions concernant ce tutoriel ici. Bonne lecture PS: N'oubliez pas de voter pour la discussion
__________________
![]()
|
|
10
|
|
|
#2 |
|
Membre du Club
![]() Inscription : mars 2007 Messages : 38 ![]() |
Salut David,
Peux-tu m'expliquer pourquoi ton tuto ne fonctionne pas si la hauteur de la liste dépasse la taille de l'écran (ce qui arrive vite) ? J'ai moi-même fais une appli toute simple et j'ai un problème : les checkbox changent aléatoirement au scroll. Si t'a la solution, merci d'avance ! A+ |
|
|
00
|
|
|
#3 |
![]() ![]() |
Bonjour buzeeg,
En effet, ceci n'est pas pratique. Ceci vient du fait que la position que nous renvoie getView est celle de l'item par rapport à la liste visible! Plusieurs solutions existent! La plus simple est d'afficher un objet (id, libelle) au lieu d'afficher un simple libelle. Ainsi, lorsque tu cliques sur ton item, tu seras à quel libelle cela correspond, donc à quel id qui correspond à la position. C'est une petite bidouille mais ca fonctionne! Sinon, il y a d'autre solution que je n'ai pas en tête la tout de suite mais je pourrais faire une mis à jour du tuto prochainement pour corriger ce bogue.
__________________
![]()
|
|
00
|
|
|
#4 | ||||||||||
![]() ![]() |
Bonjour à toutes et à tous,
Je vous poste une version de code qui ne bogue pas! Comme je l'ai dit, l'astuce est d'enregistrer la position dans le tag. Voyons ceci plus précisement dans un exemple. Créons une classe person: Code :
Ensuite, nous allons créer un adapter pour créer une liste: Code :
Enfin nous allons pouvoir initialiser et gérer notre liste dans l'activity: Code :
Voici le xml d'un item affichageitem.xml: Code :
Code :
__________________
![]()
|
||||||||||
|
00
|
|
|
#5 | ||||
|
Inscrit
![]() Inscription : février 2008 Messages : 650 ![]() |
Parfait... sauf que ton style de code ressemble à un developpeur en C!
Tout les classes en Java sont fortement conseillé d'avoir une lettre Majuscule comme debut! person, personAdapter ne respectent pas la convention de style Java... // Initialisation de la position Code :
// Initialisation de la position Code :
|
||||
|
00
|
|
|
#6 | ||||
|
Invité de passage
![]() Inscription : février 2012 Messages : 1 ![]() |
Bonjour,
J'ai testé la version de base qui bug comme expliqué selon la position. J'ai ensuite essayé la correction proposée ici, mais les items ne se checked pas du tout. Je clique bien sur l'item, je fais un log pour voir s'il rentre bine dans la fonction Code :
EDIT : bon en fait il suffisait de modifier un peu le code Code :
Parce que la checkbox est récupéré par CheckBox c = (CheckBox) selectedItemView.findViewById(R.id.checkbox); et selectedItemView correspond au linearlayout j'imagine? |
||||
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Personnellement, je préfèrerai utiliser un "CheckableLayout" comme racine des items... et laisser le ListView gérer les checked/unchecked....
Ca permet de beneficier de tout le code de style de selection (only one, multiple, ...) et de pouvoir utiliser les styles (par exemple le background qui change quand l'item est 'checked').... Exemple de "CheckableLayout": Code :
Quand le layout est "checked" la checkbox est checked.... etc... |
||
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2006 Messages : 129 ![]() |
Bonjour,
J'ai vu ce post et il m'intéresse tout particulièrement, mais je n'y arrive pas ... La différence, c'est qu'il ne s'agit pas de liste avec des checkbox, mais d'une liste dont je veut pouvoir griser le fond de certains item selon un critère donné. Avant de rentrer dans un éventuel détail, je me demandais si tout bonnement c'était possible ou si il n'y avait rien à faire... Meurci d'avance... |
|
|
00
|
|
|
#9 |
![]() ![]() |
Oui avec un CheckableLayout (cf mon post ci-dessus).
Il suffit de mettre comme background un state-selector... |
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2006 Messages : 129 ![]() |
Merci, mais je suis débutante et j'avoue que je patauge sévèrement...
Ce que je veux, ce n'est pas des items qui change de couleur à un clic donné, mais une liste qui selon un paramètre utilisateur qu'il a enregistré dans ses préférences, grise un certains nombre d'éléments dans la liste et que lorsqu'on scrolle cette liste, il ne faut pas que cela bug (ce qui est mon cas, actuellement). Je ne comprends pas bien ce que tu proposes. Cela veut-il donc dire qu'il ne sert à rien d'utiliser BaseAdapter? Merci d'avance [EDIT] Finalement, j'y suis arrivée ! Merci pour ce post ! |
|
|
00
|
|
|
#11 |
![]() ![]() |
L'adapter n'a rien à voir la dedans....
L'adapter sert à faire l'interface entre un "widget" (le ListView) et les données, en indiquant comment représenter chaque item (Les "Layout" de chaque item). La ListView sait gérer tout un tas de cas: Checkable-items ou pas, multiple selection ou single selection.... Dans tous les cas, la ListView va essayer de "caster" le layout de l'item selectionné et appeler setChecked() dessus... Dans le cas "classique" ou les items sont les layouts par défaut d'android (android.R.layout.checkableListItem ou un truc du genre), il sagit simplement d'un CheckedTextBox (qui implémente Checkable) => ca marche Dans le cas ou on "override" le layout, ce layout n'implémente pas Checkable => ca ne marche pas. il faut que la view initiale soit "Checkable" sinon rien ne marchera. D'ou l'idée de faire un CheckableLayout qui va conserver ce flag. Solution 1: Faire un truc compliqué qui va trouver les autres éléments checkables du layout => ca ne marche pas toujours. Solution 2: Faire un vrai CheckableLayout qui va maintenir la StateList de la view... => On peut alors faire ce qu'on veut: rajouter des éléments checkable dedans (en leur faisant hériter le state du parent), mettre un background "state-selected" (qui fait que le background change en fonction de l'état checked ou non), etc... |
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Inscription : mars 2009 Messages : 73 ![]() |
Bonjour,
J'ai suivi le tuto. J'ai rajouté une db et les éléments de la liste sont chargés depuis la db. Mais je ne sais pas comment faire pour définir la valeur de checkbox. Quelqu'un peut d'aider? Merci |
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Clement GGG Inscription : octobre 2010 Messages : 11 ![]() |
Même question que Snote, merci d'avance
|
|
|
00
|
|
|
#14 | |||
![]() ![]() |
Citation:
Il est donc facile de la stocker dans une base de données. Il y a différente manière de stocker l'information. Soit on la stocke une fois cochée (donc modifiée), soit on la stocke une fois qu'on change de vue qu'elle soit cochée ou non. Une fois stockée, lorsque vous récupérer les informations en base, il suffit de voir si la valeur est à true et de définir la case à cocher: Code :
__________________
![]()
|
|||
|
00
|
Copyright © 2000-2013 - www.developpez.com