2012-05-09 67 views
0

我試圖單純地在動作腳本中編寫項目渲染器(在Flash Builder 4.6中),因爲與內置渲染器相比,動作腳本似乎提供了更快且更可定製的接口。 (標籤/圖標等)。在Flash Builder中的ActionScript中編寫ItemRenderer

我希望列表顯示圖像和兩個文本字段。目前它將所有這些元素放置在畫布上,但只要我開始滾動(並且虛擬列表有效),我的舊元素不會從舞臺上移除。例如: 之前滾動 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

爲了資源使用最小化,閃光燈回收的itemRenderer。這意味着每個ItemRenderer可以構造一次,然後將其數據多次更改。

這意味着你的情況是,每個渲染器的數據設定時,它會在渲染組件(文本域,圖像)。

你需要做的,解決這個問題是什麼:

  1. 將所有創建組件/ addElement方法/的addChild代碼到構造。
  2. 創建變量以存儲對這些組件的引用。
  3. set data,更改,而不是創建新的組件由這些對象中示出的數據,。
+0

你一直是最好的幫助,謝謝你的簡潔明瞭的答案!修正它吧。 – user1383938

+0

我只是偶然發現了這個問題,並會評論你的答案。雖然通常是正確的,但不應將元素的創建移到構造函數中。正確的位置是'createChildren'方法。 – AlBirdie

相關問題