steph68 Posté(e) 20 septembre 2012 Auteur Share Posté(e) 20 septembre 2012 bon ben écoute, en remplaçant le onItemSelected() jamais exécuté par onItemClick() j'obtiens aussi ce qu'il me faut. quant à savoir pourquoi il se bornait à ne pas lancer le onItemSelected(), ça..................................... je renonce, déjà passé trop de temps là dessus........... mais c d'autant plus space que si je commentarise le corps de la fct, Eclispe gu***** puisque pour lui, il manque 1 méthode abstraite à la classe! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
djeman Posté(e) 20 septembre 2012 Share Posté(e) 20 septembre 2012 A mon avis tu vois pas ce que je veux dire à cause de ta source de donnée. Ma source => http://msieurlolo.fr/temp/json_test.oo J'entre 4 lettres "Mars", la liste se met à jour, l'adapter se met à jour, il m'affiche donc dans les choix le 1er élément de l'adapter "NEW YORK CITY" au lieu de m'afficher l'autocompletion. J'entre une lettre de plus un "e" donc j'ai "Marse" dans ma textview, l'autocompletion m'affiche "Marseille" pendant 1 ou 2s le temps que l'adapter se fasse changer et hop du coup il m'affiche en autocompletion le 1er élément "NEW YORK CITY". Tu vois mieux le truc ? Si je charge ma liste complète dans le oncreate et que j'enlève ton event "onTextChanged" tout fonctionne normalement niveau autocompletion. Et si t'implemente un truc dans ta classe t'es obligé d'y mettre les fonctions que t'implemente même si tu ne les utilises pas. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph68 Posté(e) 20 septembre 2012 Auteur Share Posté(e) 20 septembre 2012 adapter: oui effectivement j'ai du mal à voir l'explication :mellow: peut être que je mélange des notions -> tu peux me renvoyer le code corrigé STP? -> là j'aurais une base de travail concrète en comparant ma version & la tienne ^_^ implémentation: oui, je sais, mais CT juste pour dire que si je commentarise ma fct il la réclamme, et [color=red]qd[/color] elle existe il s'en tape et ne passe pas dedans. :unsure: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
djeman Posté(e) 20 septembre 2012 Share Posté(e) 20 septembre 2012 (modifié) Tiens j'avais même pas regardé pour l'event et effectivement il fait rien, je corrige ça et je te passe la classe. adapter c'est justement pour pas embrouiller avec le français, tu crée une arrayadapter que tu assignes à une autocompletetextview avec un setadapter. Quand je parle de changement ben c'est le moment ou tu l'assignes. Edit: Bon conclusion, onitemselected ne fonctionnera pas avec un controle touch car tu ne fais que cliquer dessus tu ne le sélectionnes jamais. Par contre si quelqu'un utilise un clavier, un pad, ... un truc qui permet de se déplacer dans une liste comme avec les flèches du clavier et d'appuyer sur entrée ben là il ne cliquera pas dessus il le sélectionnera (Et l'event click ne fonctionnera pas ^^). On se sent moins débutant une fois qu'on le sais :P Pour que l'autocompletion fonctionne correctement donc, j'ai chargé la liste direct dans l'autocompletetextview dans le oncreate puis j'y ai plus touché comme ça: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ville = (AutoCompleteTextView) findViewById(R.id.ville); new RemplirVille().execute(BASE_URL + "json_test.oo"); //ville.addTextChangedListener(this); ville.setOnItemSelectedListener(this); } Après il gère tout tout seul vu que t'as paramétré le completionThreshold dans le xml. Modifié 20 septembre 2012 par djeman Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph68 Posté(e) 21 septembre 2012 Auteur Share Posté(e) 21 septembre 2012 (modifié) Ok, donc si j'ai bien compris, tu charges toute la liste des villes dès le départ, ok. Sauf que dans mon cas, ça impliquerait de charger entièrement une table de +60 000 lignes :o . Impossible quoi! Donc mon but au départ, et c'est peut être là que j'ai probablement fait 1 erreur technique ou d'explication claire, était de ne charger QUE les villes commençant par les 4 premières lettres, justement pour réduire le volume des data transférées. En clair si je reprends ton exemple http://msieurlolo.fr/temp/json_test.oo je tape au clavier: N que se passe-t-il? rien je tape au clavier: NE que se passe-t-il? rien je tape au clavier: NEW que se passe-t-il? rien je tape au clavier: NEWY que se passe-t-il? - la RQT se lance et ramène les villes avec NEWY* - la liste affiche " NEWYORK CITY, NEWYORK bateau, NEWYORK STATE " - et là on sélectionne l'item qu'on veut parmi les 3 propositions - ou je continue à taper ... je tape au clavier: NEWYORK S que se passe-t-il? - la RQT se lance et ramène les villes avec NEWYORK S* - la liste affiche " NEWYORK STATE" - et là on sélectionne l'item qu'on veut dans la liste Donc, pour moi, il fallait bien passer par le onTextChanged, justement pour détecter la saisie du 4ème caractère. Voilà l'idée au départ. :) Est ce que c'est plus clair? ^_^ PS aux modos: -> 'tain qu'est ce que c'est casse-c******* cette gestion des indentations dans cet éditeur!!! :angry: -> pas moyen de faire qq chose? :unsure: Modifié 21 septembre 2012 par steph68 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
djeman Posté(e) 21 septembre 2012 Share Posté(e) 21 septembre 2012 (modifié) Ok ben tout est bon :) Ah non un truc est pas terrible, pour améliorer le truc tu devrais récupérer la liste qu'avec 4 caractères. 3 caractères on affiche rien mais avec 5 la récupération de la liste est inutile car la textview peut gérer tout seul l'autocompletion avec les données qu'elle a. Edit: En faisant ça on se confronte au problème d'avoir aucun choix car au moment où on frappe le 4eme caractères l'adapter est vide donc l'autocompletion ne se fait pas. Edit2: Donc j'ai testé en bloquant l'update de l'adapter pour seulement 4 caractères en changeant: if (ville.enoughToFilter()) par if (ville.length() == ville.getThreshold()) Et là j'ai les choix qui n’apparaissaientt plus avec 4 caractères mais seulement avec 4+1 pour ce soucis je lui ai juste demandé de faire apparaitre la drop down liste après avoir chargé l'adapter. } else // .. SINON affecter les data à l'adapter! { ville.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_selectable_list_item, list)); Log.d("*********ADAPTER OK", "DATA = " + list); if (ville.length() == ville.getThreshold()) ville.showDropDown(); else ville.setText(ville.getText()); } Bon ben là le problème est complètement réglé non ? :D Edit3: Modifié pour ceux qui frappent rapidement. Modifié 21 septembre 2012 par djeman 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph68 Posté(e) 24 septembre 2012 Auteur Share Posté(e) 24 septembre 2012 yep, merci. :) 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.