Autocomplete Text View + Json Server pour récupérer les tags Dynamiquement
-
25-10-2019 - |
Question
Je développe une application android. J'ai un autocompleteTextView dans ma mise en page. Je veux remplir cette textView avec les suggestions de mon serveur. Il y a environ 400 mots-clés sur le serveur et ils augmenteront dans un avenir proche donc je ne peux pas analyser toutes les balises à la fois, puis vérifier les suggestions. Le autocompleteTextView devrait travailler plus comme comme la recherche de Google, de sorte que je parse que lorsque l'utilisateur a tapé quelque chose et que l'analyse syntaxique qui se passe sur l'interface utilisateur fil.
Mais je ne suis pas ici en mesure de déclencheur qui l'analyseur depuis que je ne suis pas en mesure d'obtenir cette méthode de rappel ou peut-être l'événement qui détecte que l'utilisateur a tapé quelque chose ou peut être modifié du texte.
setOnEditorActionListener ne fonctionne que lorsque l'utilisateur appuie sur la touche entrée du clavier tactile.
Merci à l'avance
La solution
Vous pouvez utiliser l'interface de filtre pour mettre en œuvre aussi. Il se trouve que Filter.performFiltering () est renvoya sur le thread d'interface utilisateur juste pour ce type d'objet. Voici un code que j'utilise pour faire ceci:
Filter filter = new Filter() {
@Override
public CharSequence convertResultToString(Object resultValue) {
return resultValue.toString();
}
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
if( charSequence == null ) return null;
try {
// This call hits the server with the name I'm looking for and parses the JSON returned for the first 25 results
PagedResult results = searchByName( charSequence.toString(), 1, 25, true);
FilterResults filterResults = new FilterResults();
filterResults.values = results.getResults();
filterResults.count = results.getResults().size();
return filterResults;
} catch (JSONException e) {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
if( filterResults != null ) {
adapter.clear();
adapter.addAll( (List<MyObject>)filterResults.values );
}
}
};
Ensuite, en utilisant le filtre:
private AutoCompleteTextView beverageName;
...
beverageName = findViewById( R.id.beverageName );
ListAdapter adapter = ...
adapter.setFilter(filter);
beverageName.setAdapter(adapter);
Autres conseils
Vous pouvez utiliser la TextWatcher interface pour faire quelque chose à chaque fois que l'utilisateur modifie le texte dans une vue EditText. Il suffit de mettre en œuvre une ou plusieurs des méthodes de TextWatcher, je l'habitude d'utiliser onTextChanged()
. J'espère que cela pourra aider!