Автозаполнение текстового просмотра + json -сервер для динамического получения тегов

StackOverflow https://stackoverflow.com/questions/6815286

Вопрос

Я разрабатываю приложение для Android. У меня есть AutoCompleteTextView в моем макете. Я хочу заполнить этот TextView предложениями с моего сервера. На сервере насчитывается около 400 ключевых слов, и они увеличатся в ближайшем будущем, поэтому я не смогу проанализировать все теги одновременно, а затем проверить предложения. AutoCompletEteTextView должен работать больше как поиск в Google, так что я анализирую только тогда, когда пользователь вводит что -то, и этот анализ происходит в потоке пользовательского интерфейса.

Но я здесь не могу запустить этот анализатор, так как я не могу получить этот метод обратного вызова или может быть событием, которое испытывает, что пользователь что -то напечатал или может быть отредактирован некоторым текстом.

SetEnitorActionListener Работает только тогда, когда пользователь нажимает кнопку Enter на мягкой клавиатуре.

заранее спасибо

Это было полезно?

Решение

Вы также можете использовать интерфейс фильтра, чтобы реализовать это. Оказывается, Filter.performfiltering () вызывает поток пользовательского интерфейса только для этого типа цели. Вот какой -то код, который я использую, чтобы сделать это:

        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 );
            }
        }
    };

Затем используя фильтр:

    private AutoCompleteTextView beverageName;
    ...

    beverageName = findViewById( R.id.beverageName );
    ListAdapter adapter = ...
    adapter.setFilter(filter);
    beverageName.setAdapter(adapter);

Другие советы

Вы можете использовать Textwatcher Интерфейс, чтобы сделать что -то, когда пользователь меняет текст в представлении EditText. Просто реализуйте один или несколько методов TextWatcher, я обычно использую onTextChanged(). Анкет Надеюсь, это поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top