是否可以强制适配器仅重绘特定项目?
目前,如果我想重绘列表,我调用notifyDataSetChanged()
which 重新遍历所有数据集并重绘所有元素。如果我确切地知道哪个元素被更新并且我只想重绘那个元素怎么办?
notifyDataSetChanged()
不是为了重绘元素,而是为了通知适配器,元素以某种方式发生了变化,例如有更多元素,或者它们的数据是从其他类设置的等等。当然,ListView
(或其他类),适配器连接到的元素将重绘元素,因为适配器被迫告诉他,它的数据集被改变了。
正如 Yume117 评论的那样,对于重绘,您可以调用 oneView
的invalidate()
方法(甚至更好postInvalidate()
),
postInvalidate():
导致在事件循环的后续循环中发生无效。
public void invalidate ()
Added in API level 1
Invalidate the whole view. If the view is visible, onDraw(android.graphics.Canvas) will be called at some point in the future. This must be called from a UI thread. To call from a non-UI thread, call postInvalidate().
Adapter
您可以在's方法中对一个视图调用这些方法getView()
,或者只对 ListView(或其他视图)本身调用 invalidate,它只会重绘可见元素。
没有这种开箱即用的方法,这还不错,因为没有重新迭代整个数据集,也没有重新绘制所有元素,而只是当前可见的元素。这些通常不是很多。
您可以使用 Map 创建单调对象。然后把你的对象的每个视图放到这张地图上。毕竟,你可以改变这个对象,重绘你指定的 View(你必须知道位置)然后调用notifyDataSetChanged()
.