1

是否可以强制适配器仅重绘特定项目?

目前,如果我想重绘列表,我调用notifyDataSetChanged()which 重新遍历所有数据集并重绘所有元素。如果我确切地知道哪个元素被更新并且我只想重绘那个元素怎么办?

4

3 回答 3

1

notifyDataSetChanged()不是为了重绘元素,而是为了通知适配器,元素以某种方式发生了变化,例如有更多元素,或者它们的数据是从其他类设置的等等。当然,ListView(或其他类),适配器连接到的元素将重绘元素,因为适配器被迫告诉他,它的数据集被改变了。
正如 Yume117 评论的那样,对于重绘,您可以调用 oneViewinvalidate()方法(甚至更好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,它只会重绘可见元素。

于 2013-08-30T14:18:30.273 回答
0

没有这种开箱即用的方法,这还不错,因为没有重新迭代整个数据集,也没有重新绘制所有元素,而只是当前可见的元素。这些通常不是很多。

于 2013-08-30T14:15:13.667 回答
0

您可以使用 Map 创建单调对象。然后把你的对象的每个视图放到这张地图上。毕竟,你可以改变这个对象,重绘你指定的 View(你必须知道位置)然后调用notifyDataSetChanged().

于 2013-08-30T14:18:09.900 回答