2012-05-09 6 views
0

アクションスクリプトは、組み込みのレンダラーと比較して、より迅速でカスタマイズ可能なインターフェイスを提供するように見えるため、(Flash Builder 4.6で)アイテムレンダラーを作成しようとしています。 (ラベル/アイコンなど)。Flash BuilderでActionscriptにItemRendererを書き込む

私はリストに画像と2つのテキストフィールドを表示したいと考えました。現在のところ、これらの要素はすべてキャンバスに配置されますが、スクロールを開始するとすぐに(仮想リストに反映されます)、私の古い要素はステージから削除されません。例: は http://i.stack.imgur.com/Mk5HX.png をスクロールする前に http://i.stack.imgur.com/Qt7wZ.png

をスクロールした後のデータは、名前、画像、当社及びタイトルに格納されます。

この問題に関するヘルプや、実際に私がしようとしていることを実行するためのより良い方法は、非常に高く評価されます。

現在、私は、リソースの使用を最小限にするために(私は輸入品などを削除した)

public class UILabel2 extends IconItemRenderer 
    { 
     public function UILabel2() { 
      super(); 
     } 
override public function set data(value:Object):void 
     { 
      super.data = value; 
      var DBname:String = data.name as String; 
      var DBimage:String = data.image as String; 
      var DBcompany:String = data.Company as String; 
      var DBtitle:String = data.Title as String; 

      //iconField = location; 

      trace(DBname); 
      label = DBname; 
      messageField = "Peanuts"; 

      //iconWidth=64; 
      //iconHeight=64; 
      avatarHolder = new Graphic(); 
      avatar = new BitmapImage(); 

      iconField = DBimage; 

      avatar.fillMode = "clip"; 
      avatar.source = DBimage; 
      avatarHolder.width = 64; 
      avatarHolder.height = 64; 

      avatarHolder.addElement(avatar); 
      addChild(avatarHolder); 

      text2 = new TextField(); 
      text2.x = textMargin; 
      text2.y = 45; 
      text2.text = DBcompany; 
      addChild(text2); 

      var text3:TextField = new TextField(); 
      text3.x = textMargin; 
      text3.y = 25; 
      text3.text = DBtitle; 
      addChild(text3); 
      //trace(listArrow1MED); 

      arrowHolder = new Graphic(); 

      //arrowHolder.width = 20; 
      //arrowHolder.height = 20; 
      arrowHolder.x= Wsize-40; 
      //trace(Wsize); 

      arrow = new BitmapImage(); 



      arrow.fillMode = "clip"; 
      arrow.source = listArrow1LGE; 



      arrowHolder.addElement(arrow); 
      addChild(arrowHolder); 


      //iconField = avatar; 
     } 

答えて

0

クラスを持って、FlashがItemRenderersをリサイクルしています。これは、各ItemRendererが一度構築され、そのデータが複数回変更されることを意味します。

レンダラーのデータが設定されるたびに、新しいコンポーネント(テキストフィールド、イメージ)がレンダラーに作成されます。コンストラクタに

  1. 移動作成コンポーネント/ addElementの/にaddChildコードのすべて:あなたはこれを修正するために必要な何

  2. これらのコンポーネントへの参照を格納する変数を作成します。
  3. set dataに、新しいコンポーネントを作成するのではなく、それらのオブジェクトが示すデータを変更します。
+0

あなたは一番の助力を受けてくれました。あなたの明確で簡潔な回答に感謝します。それを修正しました。 – user1383938

+0

私はこの質問を見つけたばかりで、あなたの答えにコメントしたいと思います。一般的には正しいですが、要素の作成をコンストラクタに移動しないでください。正しい場所は 'createChildren'メソッドです。 – AlBirdie

関連する問題