【问题标题】:How android's BaseAdapter notifyDataSetChanged method work?android 的 BaseAdapter notifyDataSetChanged 方法是如何工作的?
【发布时间】:2012-09-09 09:35:21
【问题描述】:

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

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

另外,notifyDataSetChanged()getView() 有什么关系?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    不,家长ListView 会收到通知。当您在ListView 上设置适配器时,将为该适配器设置一个观察者(来自ListView)。在适配器上调用notifyDataSetChanged 将通知来自ListView 的观察者数据发生了某些事情。此时ListView 将重新创建行以显示新数据。

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

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

    【讨论】:

    • 当我调用 notifyDataSetChanged 时,有时不会调用 getView。这怎么可能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多