2012-07-29 7 views
0

Je suis confronté à un problème étrange avec AutoCompleteTextView. Mon code est le suivant,Android: AutocompleteTextView comportement étrange

AutoCompleteTextView searchText = //findView... 
private ArrayList<String> suggestions = null; 
private ArrayAdapter<String> suggestionAdapter = null; 
suggestionAdapter = new ArrayAdapter<String>(this, R.layout.list, suggestions); 
searchText.setAdapter(suggestionAdapter); 

Et en bas du code, je remplis la arrayList dans une boucle for.

for (int i = 0; i < nl.getLength(); i++) { 
     Element suggestion = (Element)nl.item(i); 
     String name = suggestion.getAttribute("data"); 
     suggestions.add(name); 
    } 

Ceci ne me montre pas les suggestions pendant que je tape dans la vue de texte.

Cependant, lorsque j'ajoute des chaînes à l'arrayliste en dehors de la boucle for (comme, juste après la boucle), je suis capable de voir les suggestions. Ça m'a dérangé pendant les deux dernières heures. Toute suggestion serait appréciée. Et croyez-moi, je suis en train de taper l'un des textes connus que je remplis dans la boucle for.

Thx! Rahul.

Répondre

0

ne définissez pas l'adaptateur avant l'forloop. Ajouter toutes les chaînes à la ArrayList des cordes et thne après pour une utilisation en boucle ceci:

suggestionAdapter = new ArrayAdapter<String>(this, R.layout.list, suggestions); 
AutoCompleteTextView searchText = //findView... 
searchText.setAdapter(suggestionAdapter); 

espère que cela fonctionne.

+0

mais c'est une logique tout à fait évidente. Si c'est ce que vous avez déjà fait. veuillez poster le code d'activité complet ou, au moins, tout le code lié à AutoCompleteTextView et à l'adaptateur. Juste pour voir le flux de code –

+0

Thx Archie !!! Tu m'as sauvé. Et oui, c'est un code évident. Dans mes premières applications, je ne mets jamais la arrayList dynamiquement. J'avais l'habitude d'initialiser la liste au début du code et puis l'ai réglée à l'adapteur. Dans cette application, je dois retirer des données sur Internet, puis remplir la liste. – rahul

0

mettre la ligne suivante après la boucle for.

suggestionAdapter.notifyDataSetChanged(); 

ou mettre la ligne suivante dans le premier code.

suggestionAdapter.setNotifyOnChange(true) 

Plus de détails setNotifyOnChange(boolean), notifyDataSetChanged()

+0

Oui .. essayé cela aussi ... pas d'utilisation. – rahul