ListView invalidate() 与 invalidateViews() 之间的区别?

Posted

技术标签:

【中文标题】ListView invalidate() 与 invalidateViews() 之间的区别?【英文标题】:Difference between ListView invalidate() vs invalidateViews()? 【发布时间】:2015-11-11 20:00:56 【问题描述】:

ListView.invalidate() 和 ListView.invalidateViews() 有什么区别?

对我来说,单独的 invalidate() 不起作用。而 invalidateViews() 只是按照我想要的方式工作,即重绘列表项。

【问题讨论】:

【参考方案1】:

根据android网页View Invalidate,ListView.invalidate()会

使整个视图无效。如果视图可见, onDraw(android.graphics.Canvas) 将被调用

这将通过onDraw 事件重绘画布背景。这在外观/感觉发生变化时很有用。

ListView.invalidateViews(),Android上声明AbsListView invalidateViews,

导致所有视图被重建和重绘。

我认为这意味着它将“重建”与 ListView 关联的修改数据,并更新外观/感觉。但是,这也会更新 子视图,而且非常耗时。通常,当数据发生变化时,我会使用 BaseAdapter 的 notifyDataSetChanged()。

总之,使用适合您需要的方法。

【讨论】:

以上是关于ListView invalidate() 与 invalidateViews() 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Invalidate() InvalidateRect() 与 UpdateWindow()

源码分析篇 - Android绘制流程requestLayout()与invalidate()流程分析

Android ListView scrollby 剪辑列表中的项目

Invalidate(TRUE)与Invalidate(FALSE)区别(前者会发送WM_ERASEBKGND消息全部刷新,然后使用WM_PAINT消息绘制,而后者只发送WM_PAINT消息)(示例代

Project Butter与invalidate

0758-5.16.2-Impala的invalidate与refresh介绍