IllegalStateException: содержимое адаптера изменилось, но ListView не получил уведомления
Интуитивно, я знаю, когда он бросает IllegalStateException. Но в моем случае, я не могу, хотя, вероятно, догадываюсь, где проблема в источнике. Осмелюсь сказать, линии тревоги есть:
private class LoadMoreDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
if (isCancelled()) {
return null;
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
OFFSET = OFFSET + COUNT;
getWallsData();
return null;
}
@Override
protected void onPostExecute(Void result) {
mPostListAdapter.notifyDataSetChanged();
wallPostsList.onLoadMoreComplete();
super.onPostExecute(result);
}
@Override
protected void onCancelled() {
wallPostsList.onLoadMoreComplete();
}
Есть сообщение logcat:
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(2131099757, class com.costum.android.widget.LoadMoreListView) with Adapter(class android.widget.HeaderViewListAdapter)]
1 ответ:
Проблема решена: ответ найден там ! что я сделал? Я добавил, switcher, Boolean LOADMORE SWITCHER=false; в качестве глобальной видимости и заменил mPostListAdapter.notifyDataSetChanged (); из doInBackground () в getWallsData ().
private Boolean LOADMORE SWITCHER=false; .... private class LoadMoreDataTask extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { if (isCancelled()) { return null; } try { Thread.sleep(2000); } catch (InterruptedException e) { } OFFSET = OFFSET + COUNT; LOADMORE=true; getWallsData(); return null; } @Override protected void onPostExecute(Void result) { // mPostListAdapter.notifyDataSetChanged(); was replaced to getWallsData() body wallPostsList.onLoadMoreComplete(); super.onPostExecute(result); } @Override protected void onCancelled() { wallPostsList.onLoadMoreComplete(); } } ..... getWallsData(){ ... if(LOADMORE){ mPostListAdapter.notifyDataSetChanged(); LOADMORE=false; } }
Я очень-очень рад сказать: у меня больше нет этой проблемы:
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(2131099757, class com.costum.android.widget.LoadMoreListView) with Adapter(class android.widget.HeaderViewListAdapter)]