Android - проблема с динамическим обновлением AutoCompleteTextView - PullRequest
3 голосов
/ 23 ноября 2011

я пытаюсь динамически обновлять ArrayAdapter autoCompleteTextview при каждом изменении текста с помощью TextWathcer.

при каждом изменении текста возникает запрос http в новой AsyncTask и в обратном вызове из асинхронной задачиonPostExecute) я вызываю clear () из адаптера и добавляю в него новые элементы, а затем вызываю notifyDataSetChanged.К сожалению, автозаполнение никогда не показывается ..

пожалуйста, куда мне обратиться?!

вот код:

AutoCompleteTextView acCountry = (AutoCompleteTextView)layout.findViewById(R.id.autoComplete);
final ArrayAdapter<RMAutoComplete.ListItem> countriesAdapter = new ArrayAdapter<RMAutoComplete.ListItem>(this.context,android.R.layout.simple_dropdown_item_1line);
acCountry.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (s.length() > 1)
                {
                    new AsyncTask<String, Void, List<RMAutoComplete.ListItem>>(){

                        @Override
                        protected List<ListItem> doInBackground(String... params) {
                            List<ListItem> l = null;
                            try {
                                l = location.getCountryData(params[0]);
                            } catch (Exception e) {
                                Log.e(TAG,"error when getCountryData",e);
                            }
                            return l;
                        }

                        @Override
                        protected void onPostExecute(List<ListItem> countries) {
                            countriesAdapter.clear();
                            if (countries != null)
                                for (ListItem listItem : countries) {
                                    countriesAdapter.add(listItem);
                                }
                            countriesAdapter.notifyDataSetChanged();
                        }
                    }.execute(s.toString());
                }
            }

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            public void afterTextChanged(Editable s) {}
        }
    );

1 Ответ

3 голосов
/ 23 ноября 2011

Распространенная ошибка: вы вообще установили адаптер на acCountry?

...