看下源码中对于这两个方法
该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。
public void notifyDataSetInvalidated ()
该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,就会调用此方法。
通俗一下从字面上面理解,就是
1:如果要刷新的数据源改变了就调用notifyDataSetChanged ()例如:我们在新浪微博中,要进行分显示刷新微博;
2:如果那个数据源失效了之后就 调用notifyDataSetInvalidated()
这样理解是不是感觉简单多了呢?呵呵
notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。
public void notifyDataSetChanged ()
该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。
public void notifyDataSetInvalidated ()
该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。
今天用到Listview刷新功能,之前解决都是给Listview重新负上adapter这样listview就滚动到第一条了,但是这样会有些耗内存,程序写法也不美观。理论上是这样的,需要实验一下,重要的是一下两句话!
notifyDataSetInvalidated(),会重绘控件(还原到初始状态)
notifyDataSetChanged(),重绘当前可见区域