2010-05-20 6 views
2

Salut, j'ai un mx: Liste avec un DataProvider. Ce fournisseur de données est un ArrayCollection si FotoItemsFlex Liste ItemRenderer avec image perd BitmapData lors du défilement

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; 
    } 
} 

mon itemRenderer ressemble à ceci:

<?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> 

Maintenant, quand je suis défilement alors toutes les images qui laissent l'écran disparaître :(Lorsque je prends un coup d'oeil la ArrayCollection BitmapData est nul.

de chaque article Pourquoi est-ce le cas?

Répondre

0

Je pense que ce pourrait être quelque chose avec yo ur l'utilisation de data.data - Je crois que data est un mot-clé réservé dans Actionscript, et il peut être préférable de nommer votre propriété image autrement, comme data.imageData. Je ne sais pas non plus pourquoi vous importez ArrayCollection dans le rendu de l'élément, car vous ne semblez pas l'utiliser dans votre itemRenderer.

Vous pouvez rencontrer des problèmes avec itemRenderer recyling. Vous souhaiterez peut-être remplacer public function set data() et gérer la définition des propriétés des éléments individuels au lieu de se fier à la liaison.

Où regardez-vous arrayCollection pour voir que bitmapData est null?

+0

J'ai essayé de changer data.data en quelque chose d'autre mais cela ne fonctionne pas plus. Je n'utilise pas arrayCollection dans mon moteur de rendu. Le fournisseur de données est un arrayCollection. Je pense aussi que cela a à voir avec le recyclage. mais il ne devrait pas modifier les données dans arrayCollection, devrait-il? Je regarde les données dans ma vue de débogage –

3

j'ai changé de type de données données en classe FotoItem de Bitmap à BitmapData

dans le ItemRenderer je fais ce qui suit:

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

ceci fonctionne maintenant. Aucune idée de pourquoi cela ne fonctionne pas avec bitmaps

+0

Si la valeur que vous étiez initialement en train d'instancier des données était de type BitmapData, cela expliquerait pourquoi une valeur Bitmap revenait comme nulle. Vous ne pouvez pas simplement affecter BitmapData à un Bitmap et le faire convertir automatiquement. – quoo

Questions connexes