说明:
旧的数据源是通过构造方法传值传过来的。
新的数据源是通过请求服务器获取的。
这个时候,我用list = newlist来把newlist的数据交给list,再调用notifyDataSetChanged这个方法来通知listview更新数据,结果页面的数据没有刷新。
原因:
就是list的指向已经改变,它也指向newlist指向的那个内存。而调用notifyDataSetChanged会去检查原来list指向的数据是否变化,但是这时的list已经不是原来的list了,所以它无法判断,只能不作出响应了。那么,这个问题的解决方法是直接在原来的list上面更改数据,可以使用下面的代码来操作:
list.clear();
list.addAll(newlist);
adapter.notifyDataSetChanged();
这样,list的指向就不会改变,它还是指向原来那块内存,这样调用notifyDataSetChanged()就可以起作用了。
总结:
在这里的重点就是要注意在开始时传给ListView的list指向不能被改变,需要从始至终指向同一个内存,这样调用notifyDataSetChanged后就能够检测到list的数据变化,从而触发ListView的重新绘制了!