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消息)(示例代