Я использую ContentProvider + CursorAdapter + Loader.
В отдельном потоке загружаю данные из сети, парсю и добавляю в БД через ContentProvider:
context.getContentResolver().insert(uri, contentValues);
В активити получаю Cursor в методе onLoadFinish():
@Override
public void onLoadFinished(Loader loader, Cursor cursor) {
cursorAdapter.swapCursor(cursor);
cursorAdapter.notifyDataSetChanged();
}
Если по мере добавления item-ов начинаю прокручивать список вылетает ошибка:
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(-1, class com.madyar_android.app.PullToRefresh$4) with Adapter(class com.madyar_android.app.PullToRefresh$PullToRefreshAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1548)
at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4320)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
at android.view.Choreographer.doCallbacks(Choreographer.java:579)
at android.view.Choreographer.doFrame(Choreographer.java:547)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Пишут, что решается вызовом метода cursorAdapter.notifyDataSetChanged();
Подскажите, пожалуйста, где мне в этом случае вызывать notifyDataSetChanged() или проблема в другом ?