У меня есть AutocompleteTextView, работающий с ArrayAdapter.Адаптер обновляется из веб-службы, когда изменяется текст.Это обновление сделано в AsyncTask, что должно быть хорошей практикой.Это работает более или менее, потому что предложения после каждой нажатой клавиши основаны на строках, найденных в предыдущей нажатой клавише.Есть несколько проблем, связанных с этой страницей, но ни один из ответов не работает для меня.В любом случае, у меня было решение, но оно неэффективно, и я не знаю, почему «официальное решение» не работает.
Я думаю, что ключ находится в функции, которая обновляет de ArrayAdapter в фоновом режиме.Это то, что я делаю в асинхронном вызове веб-сервисов:
private class DoAutoCompleteSearch extends AsyncTask<String, Void, Map<String, String>> {
@Override
protected Map<String, String> doInBackground(String... params) {
// Ask the webservice for data
Map<String, String> autoComplete = GetResource.dataList(params[0]);
return autoComplete;
}
@Override
protected void onPostExecute(Map<String, String> result) {
//mAutoCompleteAdapter.clear(); * This should work but does not *
/* If it is set a new adapter in the AutoCompleteTextView, the whole thing works properly */
mAutoCompleteAdapter = new ArrayAdapter<String>(mAutoCompleteAdapter.getContext(), android.R.layout.simple_dropdown_item_1line);
mACTV.setAdapter(mAutoCompleteAdapter);
for (Map.Entry<String, String> entry : result.entrySet()) {
mAutoCompleteAdapter.add(entry.getKey());
}
}
}
Я пробовал с mAutoCompleteAdapter.clear () и установкой mAutoCompleteAdapter.notifyDataSetChanged () везде, но это бесполезно.