2012-12-03 109 views
1

我有一个List与他的ItemRenderer,好吧,当我发送数据到数据提供者,这个函数'设置数据'(覆盖)输入,我有那里两个图像和一个标签,当数据发送时,我检查图像是否有设置的源,如果这个项目有源,那么我没有设置源,以避免眨眼效果,但它不工作,为什么?在条件我检查图像的来源,这是空的。Flex项目渲染器 - 眨眼图像

来源:

override public function set data(_data:Object) : void { 
    if (imgStatusMessage.source != _data.source) { 
     imgStatusMessage.source = _data.source; 
    } 
} 

...

<s:Image id="imgStatusMessage" width="15" height="15" visible="false"/> 

然后,当产品 '重绘' 检查这个元素的属性,如果有_data的VaR值相同,则不要再次设置该值。

编辑: 如果发送更多数据,所有项目都工作正常,除了第一项;只有第一个项目在其中一个图像中出现闪烁问题。

+0

我看到的第一件事可能会给你带来奇怪的结果,你并没有调用超级...该方法的第1行应该读取super.data = _data;第二,你应该总是检查一个有效的值进来..所以第2行的方法应该总是阅读if(_data){//做所有其他的东西}。第三个建议总是有最后一个else,它将渲染器中的所有内容都设置为null(或者某个默认值),因为渲染器被回收并且可能在渲染器中存在旧数据。试试这些,看看是否有人为你解决问题。 –

回答

0

您可以添加到您的列表定义(这将关闭渲染回收):

<s:List> 
    <s:layout> 
     <s:VerticalLayout useVirtualLayout="false" /> 
    </s:layout> 
</s:list> 

,看看是否问题依然存在。

如果不是,您可以这样保留,但它可能会影响应用程序的大型列表性能。 否则,您可能会以不会再设置source的方式来渲染渲染器,而是会从某些预制集合中添加已制作的图像,尤其是如果“源”是一个url而不是嵌入的BitmapAsset。