Intereting Posts
Как вы добавляете конфигурацию, специфичную для конкретной сборки, в APK? Частичный экран WebView с <видео> срезанным наполовину Получение ошибки 500 при использовании Google REST API Иногда: <nine-patch> требует действительного атрибута src Есть ли способ проверить, была ли загружена страница из кеша браузера? Android – фильтрация Google Play xxhdpi Как реализовать загрузку более recyclerview в android Эффект Android-аудио ограничивает 5 диапазонов Android, как получить контакты Facebook / Twitter / etc Java.lang.NoClassDefFoundError со всеми R classess при использовании библиотеки Android Панель действий не отображает элементы действия (все в переполнении) Android Создайте AAR, который зависит от множества AAR Менеджер загрузки не работает на устройствах LG Android устанавливает список навигационных ящиков, чтобы открыть точную половину экрана для всего экрана устройства. Android – самый быстрый способ загрузки и воспроизведения звука в приложении

Android adapter.notifyDataSetChanged () не работает?

Я пишу приложение, которое требует получения ввода от пользователя, передавая его на сервер, который возвращает строку JSON, а затем отображает анализируемое содержимое в ListView. Я выполняю это, расширяя AsyncTask:

//stripped down version public class main extends ListActivity { ArrayList<String> listItems = new ArrayList<String>(); ArrayAdapter<String> adapter; final EditText input = (EditText)findViewById(R.id.input); input.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, int start, int before, int count) { if(!input.getText().toString().equals("")) { new GetDataTask().execute(input.getText().toString()); } } }); private class GetDataTask extends AsyncTask<String, Void, ArrayList<String>> { protected ArrayList<String> doInBackground(String... query) { URL url = new URL("http://myserversaddressgoeshere.com/search/thequerygoeshere"); URLConnection conn = url.openConnection(); BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); ArrayList<String> items = new ArrayList<String>(); //the code that parses the JSON goes here; it writes some strings to items return items; } protected void onPostExecute(ArrayList<String> items) { listItems = items; adapter.notifyDataSetChanged(); } } } 

(Это мой первый пост, поэтому я заранее извиняюсь, если моя попытка сделать блок кода завершен)

В методе onPostExecute после установки listItems, равного элементам, если я распечатаю содержимое listItems, это именно то, что я хочу. Но по какой-то причине при выполнении из onPostExecute адаптер.notifyDataSetChanged (), кажется, ничего не делает (когда он вызывается из основного потока, он отлично работает).

Если кто-то знает, что происходит и / или как это исправить, я бы очень признателен. Благодаря!

Вы можете попробовать это

  protected void onPostExecute(ArrayList<String> items) { listItems.clear(); listItems.addAll(items); adapter.notifyDataSetChanged(); } 

И я надеюсь, что вы уже делаете что-то такое

 adapter = new ArrayAdapter<String>(listItems);