Intereting Posts
Как сохранить растровое изображение, которое я получил с камеры, на SD-карту, не теряя при этом оригинальный размер и качество GetWidth не возвращает значение после масштабирования NumberFormatException: неверная ревизия: 24.0.0-alpha1: неверная ревизия: 24.0.0-alpha1 Eclipse не может найти R.layout.simple_list_item_1 Android datepicker min max дата до уровня АИП 11 Android ContentObserver: как обнаружить недавно добавленный контакт в списке контактов Android? Могу ли я создать макет вложенногоScroll, как это? Ограничивает ли приложение приложение Google Play Store конкретными странами, также запрещает публичный бета-доступ? Преобразование приложения для Android в веб-приложение Как правильно определить зависимость v7 appcompat? Как найти доступные Bluetooth-устройства в ассортименте? Android / SQLite – операция бит в выражении WHERE Sensor Fusion на Android 4 Виджет приложений для Android: хранение данных Программно заданный фон телефона Android

Как разрешить «Содержимое адаптера изменилось, но исключение ListView не получало уведомление»

Я нашел много вопросов по одной теме. Но я не могу понять, что я делаю неправильно здесь.

Исключение: «Содержимое адаптера изменилось, но ListView не получил уведомление. Убедитесь, что содержимое вашего адаптера не изменено из фонового потока, но только из потока пользовательского интерфейса»

У меня есть TextWatcher для моего автозаполненияTextView. Я пытаюсь обновить раскрывающийся список при изменении текста. Я извлекаю данные для выпадающего списка из двух разных источников. И каждый из них работает внутри разных потоков.

mTextWatcher = new TextWatcher() { public void afterTextChanged(Editable editable) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { suggestionNewText = s.toString(); list = new ArrayList<Map<String, String>>(); runOnUiThread(new Runnable() { @Override public void run() { //data processing list.add(data); handler.sendEmptyMessage(1); } }); Thread webAutoComplete = new Thread(new Runnable() { @Override public void run() { //data process list.add(data); handler.sendEmptyMessage(1); } }); try { webAutoComplete.start(); } catch (NullPointerException e) { } catch (IllegalStateException e) { } } }; 

А обработчик для адаптера находится рядом с элементом textwatcher.

  handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: { ((Activity) CONTEXT).runOnUiThread(new Runnable() { public void run() { try { if (list != null) suggestionAdapter = new UrlSuggestionAdapter( CONTEXT, list, R.layout.two_line_autocomplete, new String[] { "title", "url" }, new int[] { R.id.title, R.id.url }); if (list != null) { refreshAdapter(list); getUrl.setAdapter(suggestionAdapter); } } catch (Exception e) { } } }); break; } case 2: { break; } } } }; public synchronized void refreshAdapter(List<Map<String, String>> items) { list = items; if (list != null) { suggestionAdapter.notifyDataSetChanged(); } } 

Весь код выше находится внутри метода OnCreate (). Я всегда получаю исключение. Это происходит по определенному случаю. Эта проблема еще не решена. После создания адаптера я добавил метод notifydatasetchanged (). Тем не менее это не решает проблему. Может ли кто-нибудь указать, что я делаю неправильно здесь?

Исправлена ​​ошибка, добавляя

 suggestionAdapter.notifyDataSetChanged(); 

При каждом изменении списка вместо его вызова после нескольких вставок.