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

Était-ce utile?

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top