Adapter的notifyDataSetInvalidated()和notifyDataSetChanged()的区别

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

public void notifyDataSetChanged ()

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

public void notifyDataSetInvalidated ()

该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。

notifyDataSetInvalidated(),会重绘控件(还原到初始状态)
notifyDataSetChanged(),重绘当前可见区域

心得:

1. notifyDataSetChanged()和notifyDataSetInvalidated()刷新ListView的时候都不会改变当前显示的位置。而重新new一个Adapter,然后ListView重新setAdapter,会回到初始位置。
2. notifyDataSetChanged:粮仓中得粮食少了,或者多了,发送通知。(数据集合的引用不变)
   notifyDataSetInvalidated:粮仓变换了,比如原来从A仓取粮食,现在换成了B粮仓。比如重新setList(),更新Adapter中的List。(数据集合的引用变了)

你可能感兴趣的:(Adapter的notifyDataSetInvalidated()和notifyDataSetChanged()的区别)