【问题标题】:Flex item renderer - blink imageFlex 项目渲染器 - 闪烁图像
【发布时间】:2012-12-03 21:13:11
【问题描述】:

我有一个带有他的 ItemRenderer 的列表,好吧,当我将数据发送到 dataprovider 时,这进入函数“设置数据”(覆盖),我有两个图像和一个标签,当数据发送时我检查图像是否有要设置的来源,如果这个项目有那个来源,那么我没有设置来源以避免闪烁效果,但它不起作用,为什么?在我检查图像来源的情况下,这是空的。

来源:

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"/>

然后,当item为'repaint'时检查该元素的属性,如果_data var的值相同,则不再设置该值。

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

【问题讨论】:

  • 我看到的第一件事可能会给您带来奇怪的结果,因为您没有调用超级...该方法的第 1 行应该读取 super.data = _data;其次,您应该始终检查输入的有效值。因此,该方法的第 2 行应始终读取 if(_data){ //do all other stuff }。第三个建议是总是有一个最终的 else 将渲染器中的所有内容设置回 null (或某个默认值),因为渲染器会被回收,并且当它们这样做时可能会在其中包含旧数据。试试这些,看看能不能解决问题。

标签: apache-flex list itemrenderer


【解决方案1】:

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

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

看看问题是否仍然存在。

如果不是,您可以这样保留,但它可能会影响应用在大型列表中的性能。 否则,您可能会以这样的方式实施您的渲染器,它不会再次设置source,而是会从一些预制集合中添加已经制作的图像,特别是如果'source'是一个url而不是嵌入的BitmapAsset。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2018-08-04
    • 1970-01-01
    • 2017-05-04
    • 2010-12-08
    相关资源
    最近更新 更多