Flex List ItemRenderer с изображением теряет BitmapData при прокрутке - PullRequest
2 голосов
/ 20 мая 2010

Привет, у меня есть mx: список с DataProvider. Этот провайдер данных является ArrayCollection, если FotoItems

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 ]

3 голосов
/ 20 мая 2010

Я изменил тип данных в классе FotoItem с Bitmap на BitmapData

в ItemRenderer я делаю следующее:

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

это работает сейчас. Не знаю, почему он не работает с растровыми изображениями

0 голосов
/ 20 мая 2010

Я думаю, что это может быть чем-то, что вы используете data.data - я считаю, что data - это зарезервированное ключевое слово в Actionscript, и может быть лучше назвать ваше свойство изображения как-нибудь иначе, например data.imageData.

Я также не уверен, почему вы импортируете ArrayCollection в средство визуализации элементов, поскольку вы, кажется, не используете его в свой ItemRenderer.

У вас также могут быть проблемы с itemRenderer recyling . Возможно, вы захотите переопределить public function set data() и обработать настройку отдельных свойств элемента, а не полагаться на привязку.

Где вы смотрите на arrayCollection, чтобы увидеть, что bitmapData имеет значение null?

...