如何仅在适配器中重绘一个视图

时间:2013-08-30 14:05:16

标签: java android adapter

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

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

3 个答案:

答案 0 :(得分:1)

notifyDataSetChanged()不是用于重绘元素,而是用于通知适配器,元素已经以某种方式更改,例如,有更多元素,或者他们的数据是从其他类等设置的。当然,适配器所连接的ListView(或其他类)将重绘元素,因为适配器被强制告诉他,其数据集已更改。
正如Yume117评论的那样,对于重绘,您可以调用一个View的{​​{1}}方法(甚至更好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(). 的{​​{1}}方法中的一个视图上调用这些方法,或者只在ListView(或其他视图)本身上调用invalidate,它只会重绘可见元素。

答案 1 :(得分:0)

没有这样的方法开箱即用,这并不是因为整个数据集不会被重新迭代而且并非所有元素都被重绘,而只是当前可见的元素。这些通常不是那么多。

答案 2 :(得分:0)

您可以使用Map创建单一对象。然后将对象的每个视图放到此地图上。毕竟,您可以更改此对象,重新绘制指定的视图(您必须知道位置),然后调用notifyDataSetChanged()