Android, ListView IllegalStateException: "содержимое адаптера изменилось, но ListView не получил уведомления"



что я хочу сделать: запустите фоновый поток, который вычисляет содержимое ListView и частично обновляет ListView, в то время как результаты вычисляются.



то, что я знаю, я должен избегать: Я не могу возиться с содержимым ListAdapter из фонового потока, поэтому я унаследовал AsyncTask и публикую результат (добавление записей в адаптер) из onProgressUpdate. Мой адаптер использует ArrayList объектов результата, все операции над этими arraylists являются синхронизированный.



исследование других людей: есть очень ценные данные здесь. Я также страдал от почти ежедневных сбоев для группы ~500 пользователей, и когда я добавил list.setVisibility(GONE)/trackList.setVisibility(VISIBLE) блок в onProgressUpdate, сбои снижены в 10 раз, но не исчезли. (это было предложено в ответ)



что я иногда получаю: обратите внимание, это происходит очень редко (один раз в неделю для одного из пользователей 3.5 k). Но я бы хотел избавьтесь от этой ошибки полностью. Здесь частичная трассировка стека:



`java.lang.IllegalStateException:` The content of the adapter has changed but ListView  did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131296334, class android.widget.ListView) with Adapter(class com.transportoid.Tracks.TrackListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1432)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2062)
at android.widget.ListView.onTouchEvent(ListView.java:3234)
at android.view.View.dispatchTouchEvent(View.java:3709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
[...]


помочь? больше не требуется, см. ниже



ОКОНЧАТЕЛЬНЫЙ ОТВЕТ: как оказалось, я звонил notifyDataSetChanged каждые 5 вставок, чтобы избежать мерцания и внезапных изменений списка. Это не может быть сделано таким образом, всегда уведомлять адаптер при изменении базового списка. Эта ошибка давно ушла для меня сейчас.

657   0  

Comments

    Ничего не найдено.