2012-05-09 4 views
0

액션 스크립트는 빌트인 렌더러에 비해 더 빠르고 커스터마이징 가능한 인터페이스를 제공하는 것처럼 보이기 때문에 액션 렌더러만으로 (Flash Builder 4.6에서) 아이템 렌더러를 작성하려고합니다. (라벨/아이콘 등).Flash Builder에서 Actionscript에 ItemRenderer 작성하기

목록과 이미지를 표시하는 두 개의 목록이 필요했습니다. 현재 캔버스에 이러한 모든 요소를 ​​배치하지만 스크롤을 시작하자마자 (가상 목록이 영향을줍니다) 내 이전 요소는 스테이지에서 제거되지 않습니다. 예 : 데이터 이름, 이미지, 회사와 제목에 저장됩니다 http://i.stack.imgur.com/Qt7wZ.png

을 스크롤 한 후 http://i.stack.imgur.com/Mk5HX.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

(필자는 수입 등을 제거했습니다)이, 플래시 ItemRenderers를 재활용. 즉, 각 ItemRenderer는 한 번 생성 된 다음 여러 번 데이터가 변경 될 수 있습니다.

렌더러의 데이터가 설정 될 때마다 렌더러에 새로운 구성 요소 (텍스트 필드, 이미지)가 생성된다는 것을 의미합니다.

  1. 이동 작성 구성 요소/addElement /하는 AddChild 모든 코드를 생성자에 :

    당신은이 문제를 해결하기 위해해야 ​​할 일은.

  2. 해당 구성 요소에 대한 참조를 저장할 변수를 만듭니다.
  3. set data에서 새 구성 요소를 만드는 대신 해당 개체가 나타내는 데이터를 변경하십시오.
+0

당신은 최고의 도움을 받았으며, 명확하고 간결한 답변을 해주셔서 감사합니다! 바로 잡았어. – user1383938

+0

나는이 질문을 우연히 만났고 대답에 대해 논평했다. 일반적으로 옳긴하지만, 요소 생성은 생성자로 옮겨서는 안됩니다. 올바른 장소는'createChildren' 메소드입니다. – AlBirdie

관련 문제