notifyDataSetChanged();和notifyDataSetInvalidated();

来源:互联网 发布:android 关闭数据网络 编辑:程序博客网 时间:2024/05/11 20:22
notifyDataSetInvalidated(),会重绘控件(还原到初始状态)

notifyDataSetChanged(),重绘当前可见区域

notifyDataSetInvalidated:粮仓变换了,比如原来从A仓取粮食,现在换成了B粮仓。

notifyDataSetChanged:粮仓中得粮食少了,或者多了,发送通知。


设有粮仓A,我们需要把A中得粮食,显示出来。

然后,某天运输队,运来了一批粮食,这批粮食有两种方式存储。

1.把粮食放到A中,也就是我们说得List的Add方法。

2.新建一个粮仓B,把粮食放入B粮仓中。就是代码中,new List --->add.

就这两种情况分析一下,为什么不起作用。

第一种,如果使用notifyDataSetInvalidated,是不会起作用的,因为数据源没有变化,就是粮仓还在。这个时候应该使用notifyDataSetChanged。粮仓中得粮食变了。

第二种,这是最复杂的,大部分不起作用都发生在这种情况下。

分析:notifyDataSetChanged不起作用的原因,是因为A粮仓中粮食没有发生变化。Adapter中仍然保持是对A粮仓的地址引用。

notifyDataSetInvalidated不起作用的原因,是因为,Adapter中得变量仍然是保持对A的引用,没有改变引用地址。


0 0
原创粉丝点击