Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在适配器中仅重绘一个视图_Java_Android_Adapter - Fatal编程技术网

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

Java 如何在适配器中仅重绘一个视图,java,android,adapter,Java,Android,Adapter,是否有可能强制适配器仅重新绘制特定项 当前,如果我想重画列表,我会调用notifydatasetchange(),它会重新迭代所有数据集并重画所有元素。如果我确切地知道哪个元素被更新了,并且只想重新绘制那个元素,那该怎么办?没有现成的方法,这并不是说整个数据集都被重新迭代了,也不是所有元素都被重新绘制了,而只是当前可见的元素。这些元素通常不会太多。没有现成的方法,这并不坏,因为不是整个数据集都被重新迭代,也不是所有元素都被重新绘制,而是当前可见的元素。这些通常不太多。您可以使用Map创建单音对象

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


当前,如果我想重画列表,我会调用
notifydatasetchange()
,它会重新迭代所有数据集并重画所有元素。如果我确切地知道哪个元素被更新了,并且只想重新绘制那个元素,那该怎么办?

没有现成的方法,这并不是说整个数据集都被重新迭代了,也不是所有元素都被重新绘制了,而只是当前可见的元素。这些元素通常不会太多。

没有现成的方法,这并不坏,因为不是整个数据集都被重新迭代,也不是所有元素都被重新绘制,而是当前可见的元素。这些通常不太多。

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

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

notifyDataSetChanged()
不是用于重新绘制元素,而是用于通知适配器元素已以某种方式更改,例如有更多元素,或者从其他类设置数据等。当然,适配器连接的
列表视图(或其他类)将重新绘制元素,因为适配器被迫告诉他,其数据集已更改。
正如Yume117所评论的,对于重绘,您可以调用一个
视图
无效()
方法(或者更好的
postInvalidate()

postInvalidate():
在后续循环中导致失效 通过事件循环

您可以在
适配器
getView()
方法中的一个视图上调用这些方法,或者只在ListView(或其他视图)本身上调用invalidate,它只会重新绘制可见的元素。

notify datasetChanged()
不是用于重新绘制元素,而是用于通知适配器,元素以某种方式发生了更改,例如有更多的元素,或者它们的数据是从其他类设置的等等。当然,适配器连接到的
列表视图(或其他类)将重新绘制元素,因为适配器被迫告诉他,其数据集已更改。
正如Yume117所评论的,对于重绘,您可以调用一个
视图
无效()
方法(或者更好的
postInvalidate()

postInvalidate():
在后续循环中导致失效 通过事件循环


您可以在
适配器
getView()
方法中的一个视图上调用这些方法,或者只在ListView(或其他视图)本身上调用invalidate,它将只重新绘制可见元素。

您可以查看.invalidate()?但是如果该视图是由适配器生成的,您如何访问该视图?在调用
invalidate()
之前,您需要更新视图的值(调用
setText()
等),这通常是在适配器中完成的。但是适配器本身调用
使其无效。如果您只想更新listview的一个单元格。。。除了调用notifydatasetchanged和在GetView()中仅更新所需的视图外,我不知道如何执行此操作:/you_view.invalidate()?但是如果该视图是由适配器生成的,如何访问该视图?在调用
invalidate()
之前,需要更新视图的值(调用
setText()
等)这通常是在适配器中完成的。但是适配器会自行调用
invalidate
。如果您只想更新listview的一个单元格。。。除了调用notifydatasetchanged并在GetView()中仅更新所需的视图外,我不知道如何执行此操作:/
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().