Aller au contenu

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?

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres 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)

Modifié par Profete162
Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres 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?

Lien vers le commentaire
Partager sur d’autres 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)

Lien vers le commentaire
Partager sur d’autres 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" ?

Lien vers le commentaire
Partager sur d’autres 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...

Lien vers le commentaire
Partager sur d’autres 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 .... ?

Lien vers le commentaire
Partager sur d’autres 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é.

Lien vers le commentaire
Partager sur d’autres 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 ?

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...