android的BaseAdapter notifyDataSetChanged方法如何工作?

时间:2012-09-09 09:35:21

标签: android android-listview android-view android-adapter notify

在类notifyDataSetChanged的方法BaseAdapter的文档中注意到“通知附加的观察者基础数据已被更改,反映数据集的任何视图都应自行刷新。”

假设我更改了我的字符串数组中的第3个元素(ListView的数组数据),“反映数据集的任何视图应该刷新自己”意味着什么?是否会通知列表视图中的第3个视图项?

另外,notifyDataSetChanged()getView()的关系如何?

1 个答案:

答案 0 :(得分:8)

  

假设我更改了我的字符串数组中的第3个元素(数组数据为   列表视图),什么“任何反映数据集的视图应该刷新   本身“意味着什么?

这意味着任何显示/基于/使用该数据的视图(在您的情况下为字符串数组)都应该无效(重新测量,重新绘制)以向用户显示新的数据集。

  

是否会通知列表视图中的第3个视图项?

不,将通知家长ListView。在ListView上设置适配器时,将为该适配器设置观察者(来自ListView)。在适配器上调用notifyDataSetChanged将通知ListView观察者数据发生了什么。此时ListView将重新创建行以显示新数据。

  

另外,notifyDataSetChanged()和getView()是如何关注的?

我不确定我明白你的要求。每次需要时,getView都使用适配器的ListView方法获取新行。当您在适配器上调用notifyDataSetChanged时,这将触发ListView中的观察者。由于是时候重新创建列表,ListView将调用适配器的getView方法来显示必要的行数(屏幕上可见的行数)。因此,每次调用notifyDataSetChanged时,都会为可见行调用getView方法。