0

我正在尝试纯粹在动作脚本中编写项目渲染器(在 Flash Builder 4.6 中),因为与内置渲染器相比,动作脚本似乎提供了更快、更可定制的界面。(标签/图标等)。

我希望列表显示一个图像和两个文本字段。目前它将所有这些元素放在画布上,但是一旦我开始滚动(并且虚拟列表生效),我的旧元素就不会从舞台上删除。例如:滚动前 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;
        }
4

1 回答 1

0

为了最大限度地减少资源使用,Flash 回收了 ItemRenderers。这意味着每个 ItemRenderer 可以构造一次,然后多次更改其数据。

在您的情况下,这意味着每次设置渲染器的数据时,它都会在渲染器中创建新的组件(文本字段、图像)。

你需要做什么来解决这个问题:

  1. 将所有创建组件/addElement/addChild 代码移动到构造函数中。
  2. 创建变量以存储对这些组件的引用。
  3. set data中,更改这些对象显示的数据,而不是创建新组件。
于 2012-05-09T12:51:19.020 回答