带有图像的Flex List ItemRenderer在滚动时丢失了BitmapData

时间:2010-05-20 18:35:22

标签: flex flash data-binding list itemrenderer

您好我有一个带有DataProvider的mx:List。如果是FotoItems

,则此数据提供程序是ArrayCollection
public class FotoItem extends EventDispatcher
{
    [Bindable]
    public var data:Bitmap;
    [Bindable]
    public var id:int;
    [Bindable]
    public var duration:Number;

    public function FotoItem(data:Bitmap, id:int, duration:Number, target:IEventDispatcher=null)
    {
        super(target);
        this.data = data;
        this.id = id;
        this.duration = duration;
    }
}

我的itemRenderer看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" >
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
    ]]>
</fx:Script>

<s:Label text="index"/>
<mx:Image source="{data.data}" maxHeight="100" maxWidth="100"/>
<s:Label text="Duration: {data.duration}ms"/>
<s:Label text="ID: {data.id}"/>

</mx:VBox>

现在当我滚动时,所有离开屏幕的图像都会消失:( 当我看一下arrayCollection时,每个项目的BitmapData都为空。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

我将类FotoItem中数据的数据类型从Bitmap更改为BitmapData

在ItemRenderer中的

我执行以下操作:

override public function set data( value:Object ) : void {
            super.data = value;
            pic.source = new Bitmap(value.image);
        }

这现在有效。不知道为什么它不使用位图

答案 1 :(得分:0)

我认为这可能与您使用data.data有关 - 我认为数据是Actionscript中的保留关键字,最好将您的图像属性命名为其他内容,例如data.imageData。

我也不确定您为什么要将ArrayCollection导入到项呈示器中,因为您似乎没有在itemRenderer中使用它。

您可能还遇到itemRenderer recyling的问题。您可能希望覆盖public function set data()并处理在那里设置单个项目属性,而不是依赖于绑定。

您在哪里查看arrayCollection以查看bitmapData是否为空?