Android的BaseAdapter notifyDataSetChanged方法是如何工作的?

3
BaseAdapter类的notifyDataSetChanged方法文档中指出:"通知已连接的观察者基础数据已更改,任何反映数据集的视图都应刷新自身。" 假设我更改了我的字符串数组(ListView的数据数组),那么"任何反映数据集的视图都应刷新自身"是什么意思?第三个视图项会被通知吗?
此外,notifyDataSetChanged()getView()有什么关系?
1个回答

8
假如我更改了字符串数组(列表视图中的数组数据)中的第三个元素,那么“任何反映数据集的视图都应刷新自身”是什么意思?它意味着基于或使用该数据集(在您的情况下是字符串数组)的任何视图都应该失效(重新测量、重绘),以便向用户显示新的数据集。
我的列表视图中第三个视图项会被通知吗?不会,父级ListView将被通知。当您在ListView上设置适配器时,将为该适配器设置来自ListView的观察者。调用适配器上的notifyDataSetChanged将向来自ListView的观察者宣布已发生一些事情。此时,ListView将重新创建行以显示新数据。
另外,notifyDataSetChanged()和getView()有什么关系?我不确定我理解你在问什么。适配器的getView方法由ListView用于在每次需要时获取新行。当您在适配器上调用notifyDataSetChanged时,这将触发ListView中的观察者。因为现在是重新创建列表的时间,所以ListView将调用适配器的getView方法以显示必要数量的行(屏幕上可见的行数)。因此,每次调用notifyDataSetChanged时,对于可见行,都将调用getView方法。

2
当我调用notifyDataSetChanged时,有时候getView不会被调用。这怎么可能? - barq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接