您的位置:首页 > 其它

关于ListView中adapter调用notifyDataSetChanged无效的原因

2014-08-05 23:30 363 查看
notifyDataSetChanged无效一般有以下几个原因:

1、数据源没有更新,调用notifyDataSetChanged无效。

2、数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效。

3、数据源更新了,但是adpter没有收到消息通知,无法动态更新列表。

对于问题2,假如数据源是 List<UserInfo> infos = new ArrayList<UserInfo>();
那在引用的时候不能重新

infos = new ArrayList<UserInfo>();
来给infos重新添加数据,因为这样的话就指向新的引用了,可以先infos.clean();

infos.addall();

然后再通知adapter.notifyDataSetChanged();或者用

List<UserInfo> infosinfos2 = new ArrayList<UserInfo>();

infos
= infos2 ;进行赋值,总而言之adapter观察者监听的是数据源的数据变化,数据源更新,adapter才调用getview方法刷新UI;

在此附上notifyDataSetInvalidated()和notifyDataSetChanged()的区别

notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。

public void notifyDataSetChanged ()

该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。

public void notifyDataSetInvalidated ()

该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。
notifyDataSetInvalidated(),会重绘控件(还原到初始状态)

notifyDataSetChanged(),重绘当前可见区域
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐