关于ListView不刷新 (notifydatasetchanged无效的问题)

是的,我在被困几个小时后发现了原因,各种调试未果。

然后还是决定在网上查:
查到了:
listview中adapter的数据是放在 list里的。当刷新数据时,去服务器请求到新数据,然后
传给list。代码是在新线程里得到新数据集合list2,然后在handler里令list=list2,以为这样就可以了,
但adapter.notifyDataSetChanged无效。
原因:list里的内容并没有变。
解决方案:list.addAll(list2);确保list变化即可。

然后恍然大悟,
原因就是我是直接新的数据
List<E> oldData  = new ArrayList<E>();
....
listView.setAdater(oldData, ....)

在处理后我用了oldData = newData. 然后notifyDataSetChanged
而这就是错误的原因。listView不会认为这里数据没有变化。

正确做法是oldData.clear();  oldData.addAll(newData).
然后notifyDataSetChanged

猜你喜欢

转载自billyyuan.iteye.com/blog/1912919