【问题标题】:does ListView re-draws itself every time the adapter changed?每次适配器更改时 ListView 都会重新绘制自己吗?
【发布时间】:2013-12-10 16:05:10
【问题描述】:

我想在我自己的应用程序中制作一个短信列表..

我的问题是关于适配器的步骤(自动)

-当新消息到达时,我将其添加到列表对象(而不是 ListView)。 - 然后我将列表传递给 listView 的适配器。 为列表中的每个项目运行适配器 GetView() 方法

-我通知列表视图有关更改。 - 列表视图重新绘制所有其现有行,然后绘制新行。

我的问题:这种行为(重新绘制和重新绘制,这意味着每一行将被淹没的次数等于总行数)影响性能?

*如果问题不清楚,我会说:ListView 是否绘制所有 Raws 只是为了添加新行? *

【问题讨论】:

  • 您可能需要调用 notifyDataSetChanged();在 getView 方法中更新视图
  • 我的问题是:ListView 是否绘制所有行以添加新行???

标签: android listview android-listview


【解决方案1】:

ListView 不会为了添加一项而重绘每一项。只有当您滚动到它时才会绘制它。是的,您必须通知 ListView 发生了更改。

【讨论】:

  • 在你调用 notifyDataSetChanged() 后,它只会绘制屏幕上可见的项目,它还会重用由 getView() 创建的视图进行优化。
【解决方案2】:

我猜您想将项目添加到顶部位置。所以所有其他项目的位置和索引都会改变。适配器将重绘整个列表(仅在屏幕上可见的元素)。

为了提高性能,您可以使用 viewHolder 模式。 看到这个链接 [让ListView滚动流畅][1]http://developer.android.com/training/improving-layouts/smooth-scrolling.html

【讨论】:

  • 如果您更改数据集并调用 notifyDataSetChanged()。然后屏幕可见的项目将被重绘,正如我所说,您可以使用 viewholder 来优化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 2017-08-04
  • 2017-04-25
  • 1970-01-01
  • 2019-07-21
  • 2019-05-04
相关资源
最近更新 更多