Jump to content

La listview... Avez-vous pensé au filtre???


Profete162

Recommended Posts

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 by Profete162
Link to comment
Share on other sites

  • 1 month later...

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 by Profete162
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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" ?

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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 .... ?

Link to comment
Share on other sites

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é.

Link to comment
Share on other sites

  • 1 month later...
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 ?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...