The only workaround I found so far is to stop list scrolling before changing its data:
// before changing the data of ListView's adapter
if (listView!=null){
MotionEvent me = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_CANCEL, 0, 0, 0);
listView.dispatchTouchEvent(me);
me.recycle();
}
// now its safe to change data and call notifyDatasetChanged()