Profete162 Posté(e) 30 novembre 2009 Share Posté(e) 30 novembre 2009 (modifié) Salut tertous! Je viens seulement de me rendre compte que dans ma listview avec un fastscroll, il y a un phénomène étrange! J'ai donc une liste de Strings avec un fastscroll et quand l'utilisateur tape au clavier, un filtre se met en place avec la fonction lv.setTextFilterEnabled(true) C'est génial et super pratique, mais alors, le "position" renvoyé par la listview dans le onclick n'est plus bon du tout!!!! Exemple: Ma liste: Jules, jacques, albert, alphonse, francis, michel. Si je clique sur "al": la liste devient: albert, alphonse Du coup, si je clique sur albert, il va me renvoyer une position trop tôt! Avez-vous déjà eu ce soucis? Modifié 10 janvier 2010 par Profete162 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 1 décembre 2009 Share Posté(e) 1 décembre 2009 Ha vi j'avoue n'y avoir pô encore pensé Heureusement que la solution que j'utilise règle le problème (je stocke l'id de l'item dans un custom item, du coup la position importe peu) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 10 janvier 2010 Auteur Share Posté(e) 10 janvier 2010 (modifié) J'espere que cela aidera quelqu'un : la réponse à ma question: protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); ArrayAdapter adapter = (ArrayAdapter) l.getAdapter(); String bonnevaleur = adapter.getItem(position) Modifié 10 janvier 2010 par Profete162 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 10 janvier 2010 Share Posté(e) 10 janvier 2010 le getitem de ta liste te renvoit un objet. il faut coder l'adapter de façon à ce que le getitem te renvoit le texte. On l'a déjà dit 50 fois : implémenter VOTRE BaseAdapter. Qui va contenir par exemple: List maListe = new ArrayList(); et le getItem fera un simple: return maListe.get(position); Après l'utilisation d'un arraylist peut être discutable pour l'optimisation. Un bon gros tableau de String[] peut être plus efficace. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 10 janvier 2010 Auteur Share Posté(e) 10 janvier 2010 le getitem de ta liste te renvoit un objet.il faut coder l'adapter de façon à ce que le getitem te renvoit le texte. On l'a déjà dit 50 fois : implémenter VOTRE BaseAdapter. Qui va contenir par exemple: List maListe = new ArrayList(); et le getItem fera un simple: return maListe.get(position); Après l'utilisation d'un arraylist peut être discutable pour l'optimisation. Un bon gros tableau de String[] peut être plus efficace. Popol, je pense que tu réponds à une autre question... Imagine ma liste: ONE TWO THREE FOUR FIVE. L'utilisateur tape un 'F' au clavier, et la liste devient filtrée: FOUR FIVE. et je clique sur FIVE Ta méthode va renvoyer TWO car position= 2 Me trompe-je? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 10 janvier 2010 Share Posté(e) 10 janvier 2010 vérifie. au pire t'as l'ID dans les paramètres en plus de la position. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 10 janvier 2010 Auteur Share Posté(e) 10 janvier 2010 position = ID! Ce qui fait que quand je click sur Five apres un filtre, cela m'affiche deux!!! La solution= celle que j'ai mise au post 3: super.onListItemClick(l, v, position, id); ArrayAdapter adapter = (ArrayAdapter) l.getAdapter(); String bonnevaleur = adapter.getItem(position) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 10 janvier 2010 Share Posté(e) 10 janvier 2010 Merci , je cherché pendant une journée la réponse à ce problème. Cool Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 11 janvier 2010 Share Posté(e) 11 janvier 2010 position = ID!Ce qui fait que quand je click sur Five apres un filtre, cela m'affiche deux!!! La solution= celle que j'ai mise au post 3: super.onListItemClick(l, v, position, id); ArrayAdapter adapter = (ArrayAdapter) l.getAdapter(); String bonnevaleur = adapter.getItem(position) Toujours un petit souci avec les listview filtrés, comment récupéré la position exacte du la variable "bonnevaleur" ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 11 janvier 2010 Auteur Share Posté(e) 11 janvier 2010 Je ne comprends pas ce que tu veux faire.... Si tu veux récupérer la cellule de la liste filtrée, il faut faire comme j'ai dit: super.onListItemClick(l, v, position, id); ArrayAdapter adapter = (ArrayAdapter) l.getAdapter(); String bonnevaleur = adapter.getItem(position) Si tu veux la position, on peut imaginer: 1) faire un Array adapter d'objets au lieu de strings 2) une fois que tu as récupéré le bon string, le rechercher dans la liste de départ... autre... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 11 janvier 2010 Share Posté(e) 11 janvier 2010 Je ne comprends pas ce que tu veux faire....Si tu veux récupérer la cellule de la liste filtrée, il faut faire comme j'ai dit: super.onListItemClick(l, v, position, id); ArrayAdapter adapter = (ArrayAdapter) l.getAdapter(); String bonnevaleur = adapter.getItem(position) Si tu veux la position, on peut imaginer: 1) faire un Array adapter d'objets au lieu de strings 2) une fois que tu as récupéré le bon string, le rechercher dans la liste de départ... autre... Admettons que je souhaite récupéré la valeur dans la liste + sa position dans la liste ? Car avec ta méthode je récupère bien la bonne valeur de la liste même si cette dernière est filtrée mais par contre je récupère comment sa position réelle dans la liste ? Car que ce soit la variable "position" ou "Id" , ces deux variables sont incorrect. J'espère que c'est un peu plus clair .... ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Profete162 Posté(e) 11 janvier 2010 Auteur Share Posté(e) 11 janvier 2010 La solution que je te propose ( il y en a certainement des plus "intelligentes" car je suis assez barbare) faire un ArrayAdapter avec Objet qui stocke la position ainsi que le nom... à la place d'un simple ArrayAdapter Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 11 janvier 2010 Share Posté(e) 11 janvier 2010 La solution que je te propose ( il y en a certainement des plus "intelligentes" car je suis assez barbare) faire un ArrayAdapter avec Objet qui stocke la position ainsi que le nom... à la place d'un simple ArrayAdapter Merci. Je test çà et je te tiens informé. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 4 mars 2010 Share Posté(e) 4 mars 2010 La solution que je te propose ( il y en a certainement des plus "intelligentes" car je suis assez barbare) faire un ArrayAdapter avec Objet qui stocke la position ainsi que le nom... à la place d'un simple ArrayAdapter Merci. Je test çà et je te tiens informé. Je confirme donc qu'avec un ArrayAdapter on obtient bien de belles listes sur android. Par contre je n'arrive toujours pas à utiliser la fonction setTextFilterEnabled(true) avec une custom Listview. J'ai vu sur d'autres site web qu'il faut impérativement implémenter la méthode toString() dans la classe représentant l'objet de l'arraylist. Mais bon même avec cette fonction présente je n'arrive toujours pas à filtrer ma custom list. Des idées ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
slevin Posté(e) 11 mars 2010 Share Posté(e) 11 mars 2010 Personne pour m'aider ? :mad: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.