listview中adapter的notifyDataSetChanged()不生效的问题

来源:互联网 发布:谷歌翻墙软件下载 编辑:程序博客网 时间:2024/05/22 08:08

adapter中的数据源集合或数组等必须是同一个数据源,也就是同一个对象。

比如从数据中查找了字符串集合来当做adapter中的数据源:

先初始化数据源,然后将数据源设置到adapter中

List<String> list = Dao.getInstance().queryAllData();//初始化数据源
XXXAdaper adapter = new XXAdapter(list);//设置数据源


当数据源发生变化的时候,我们会调用adaper的notifyDataSetChanged()方法,当直接将从数据库或者其他方式获取的数据源集合或者数组直接赋值给当前数据源时,相当于当前数据源的对象发生了变化,当前对象已经不是adapter中的对象了,所以adaper调用notifyDataSetChanged()方法不会进行刷新数据和界面的操作。

错误的方法:

list = Dao.getInstance().queryNewAllData();adapter.notifyDataSetChanged();

正确的方法:

List<String> newList = Dao.getInstance().queryNewAllData();list.clear();list.addAll(newList);//或者采用遍历的方式加入集合adapter.notifyDataSetChanged();

关键就在于数据源的对象不能发生改变。