用notifyDataSetChanged没作用

转载 2016年06月01日 22:22:42

也许很多开发的朋友,尤其是Android初学者,在动态刷新ListView时,使用notifyDataSetChanged并没有起到作用。有时会被困扰得很痛苦。

其实,在使用notifyDataSetChanged过程中,还是有细节需要注意的。举个例子:

我的ListView使用的数据源是来自ArrayList。通常我们的做法是创建一个已经有我们想要提供给ListView的数据的ArrayList,例如:

ArrayList<Integer> list  = new ArrayList<Interger>;
list.add(1);

这里我们的list已经是指向了一个堆内存上了。接着我们想要改变list中的数据,而这个时候,就需要注意了,举个例子:我们在代码中有另外一个ArrayList叫做newlist,它是使用下面代码创建出来的:

ArrayList<Integer> newlist  = new ArrayList<Interger>;
list.add(2);

这个时候,newlist指向的是一个和list指向不同的堆内存,这个时候,我们直接用list = newlist来把newlist的数据交给list,在这里,实际上只是把list的指向改变了,让它也指向newlist指向的那个内存。那么这个时候我们再调用notifyDataSetChanged这个方法来通知listview更新数据就起不了任何作用了,原因很简单,就是list的指向已经改变,而调用notifyDataSetChanged会去检查原来list指向的数据是否变化,但是这时的list已经不是原来的list了,所以它无法判断,只能不作出响应了。那么,这个问题的解决方法是直接在原来的list上面更改数据,可以使用下面的代码来操作:

list.clear();
list.addAll(newlist);
adapter.notifyDataSetChanged();

这样,list的指向就不会改变,它还是指向原来那块内存,这样调用notifyDataSetChanged()就可以起作用了。

总结:在这里的重点就是要注意在开始时传给ListView的list指向不能被改变,需要从始至终指向同一个内存,这样调用notifyDataSetChanged后就能够检测到list的数据变化,从而触发ListView的重新绘制了!

关于调用adapter.notifydatasetchanged()没有效果的问题

最近在使用ListView的时候,发现调用其Adapter的notifydatasetchanged()并没有刷新数据,代码如下: 首先是初始化ListView: list = dbHelper....
  • liuyi1207164339
  • liuyi1207164339
  • 2016年06月05日 21:48
  • 958

adapter.notifyDataSetChanged()使用没有效果的解决办法。

adapter.notifyDataSetChanged()使用没有效果的解决办法。最近写代码,遇到适配器的问题,就是写了listview,里面有个全选框,用来设置全选列表项的。然而,在点击之后,更改...
  • A112740
  • A112740
  • 2015年09月07日 18:04
  • 1082

notifyDataSetChanged()没效果的原因

有时候我们调用adapter.notifyDataSetChanged()发现没有效果,原因大多数出在给adapter传递的数据集上。原因: 每次都对声明的list重新赋值...
  • github_35408196
  • github_35408196
  • 2016年06月26日 17:24
  • 91

notifyDataSetChanged 没有效果

今天发现notifyDataSetChanged时数据没有跟新,突然发现时因为用了一个临时变量,而这个临时变量第一次是new出来的,而不是用原数据源赋值=出来的。  第一次赋值就会跟新,也不会出现  ...
  • storm1314888
  • storm1314888
  • 2015年04月18日 19:12
  • 230

ListView的动态刷新问题——用notifyDataSetChanged没作用

2016年8月14日 开发记录 话说这个问题已经困扰我很久了,我以为只要数据变了,调用adapter的notifyDataSetChanged就会更新列表,最近在做微博帐号管理这一块,想着动态更新列表...
  • u014782458
  • u014782458
  • 2016年08月14日 16:11
  • 1062

adapter.notifyDataSetChanged()刷新不起作用

在项目中遇到, adapter中刷新数据无效,不能刷新数据!   1.首先先检查数据是否改变了,在数据源头debug ,      1.1有没有可能List lists,这个list有没有新new过,...
  • shanfeng3344
  • shanfeng3344
  • 2016年04月26日 18:58
  • 1685

notifyDataSetChanged不起作用

最近在开发android一个项目的时候,发现有时候notifyDataSetChanged不起作用。后来发现是我理解错了。 一个典型的错误是: list1 = new String[]{"listV...
  • nimeghbia
  • nimeghbia
  • 2017年02月01日 16:09
  • 248

Android ListView Adapter notifyDataSetChanged 刷新没有效果

Android ListView Adapter notifyDataSetChanged 刷新没有效果
  • u011183394
  • u011183394
  • 2015年06月18日 23:45
  • 2274

adapter.notifyDataSetChanged()使用没有效果的解决办法。

adapter.notifyDataSetChanged()使用没有效果的解决办法。最近写代码,遇到适配器的问题,就是写了listview,里面有个全选框,用来设置全选列表项的。然而,在点击之后,更改...
  • A112740
  • A112740
  • 2015年09月07日 18:04
  • 1082

数据加载完 adapternotifyDataSetChanged()不更新的问题

上一篇博客,我们的程序才刚开始做。          当你看到这一篇的时候我们的app已经接近尾声了,说实在的还是有点慢啊。         每天都很紧,所以也没有抽出时间来写博客。         ...
  • u012536005
  • u012536005
  • 2015年08月02日 00:11
  • 1649
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用notifyDataSetChanged没作用
举报原因:
原因补充:

(最多只允许输入30个字)