Profete162 Posted November 30, 2009 Share Posted November 30, 2009 (edited) 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? Edited January 10, 2010 by Profete162 Quote Link to comment Share on other sites More sharing options...
Fluckysan Posted December 1, 2009 Share Posted December 1, 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) Quote Link to comment Share on other sites More sharing options...
Profete162 Posted January 10, 2010 Author Share Posted January 10, 2010 (edited) 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) Edited January 10, 2010 by Profete162 Quote Link to comment Share on other sites More sharing options...
popolbx Posted January 10, 2010 Share Posted January 10, 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. Quote Link to comment Share on other sites More sharing options...
Profete162 Posted January 10, 2010 Author Share Posted January 10, 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? Quote Link to comment Share on other sites More sharing options...
popolbx Posted January 10, 2010 Share Posted January 10, 2010 vérifie. au pire t'as l'ID dans les paramètres en plus de la position. Quote Link to comment Share on other sites More sharing options...
Profete162 Posted January 10, 2010 Author Share Posted January 10, 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) Quote Link to comment Share on other sites More sharing options...
slevin Posted January 10, 2010 Share Posted January 10, 2010 Merci , je cherché pendant une journée la réponse à ce problème. Cool Quote Link to comment Share on other sites More sharing options...
slevin Posted January 11, 2010 Share Posted January 11, 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" ? Quote Link to comment Share on other sites More sharing options...
Profete162 Posted January 11, 2010 Author Share Posted January 11, 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... Quote Link to comment Share on other sites More sharing options...
slevin Posted January 11, 2010 Share Posted January 11, 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 .... ? Quote Link to comment Share on other sites More sharing options...
Profete162 Posted January 11, 2010 Author Share Posted January 11, 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 Quote Link to comment Share on other sites More sharing options...
slevin Posted January 11, 2010 Share Posted January 11, 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é. Quote Link to comment Share on other sites More sharing options...
slevin Posted March 4, 2010 Share Posted March 4, 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 ? Quote Link to comment Share on other sites More sharing options...
slevin Posted March 11, 2010 Share Posted March 11, 2010 Personne pour m'aider ? :mad: Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.