在Flash Builder的Actionscript中编写ItemRenderer
我试图在Flash Builder 4.6中编写一个项目渲染器,它完全是在动作脚本中编写的,因为与内置渲染器相比,动作脚本似乎提供了更快、更可定制的界面。标签/图标等 我希望列表显示一个图像和两个文本字段。目前,它将所有这些元素放在画布上,但一旦我开始滚动和虚拟列表生效,我的旧元素就不会从舞台上移除。如: 滚动前 滚动后 数据存储在名称、图像、公司和标题中 任何关于这个问题的帮助,或者事实上是一个更好的方式来做我想做的事情,都将不胜感激 目前我有一个类,我已经删除了导入等在Flash Builder的Actionscript中编写ItemRenderer,flash,actionscript,itemrenderer,Flash,Actionscript,Itemrenderer,我试图在Flash Builder 4.6中编写一个项目渲染器,它完全是在动作脚本中编写的,因为与内置渲染器相比,动作脚本似乎提供了更快、更可定制的界面。标签/图标等 我希望列表显示一个图像和两个文本字段。目前,它将所有这些元素放在画布上,但一旦我开始滚动和虚拟列表生效,我的旧元素就不会从舞台上移除。如: 滚动前 滚动后 数据存储在名称、图像、公司和标题中 任何关于这个问题的帮助,或者事实上是一个更好的方式来做我想做的事情,都将不胜感激 目前我有一个类,我已经删除了导入等 public cla
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;
}
为了最大限度地减少资源使用,Flash会回收ItemRenders。这意味着每个ItemRenderer可以构造一次,然后将其数据更改多次 在您的案例中,这意味着每次设置渲染器的数据时,它都会在渲染器中创建新的组件文本字段和图像 要解决此问题,您需要做什么: 将所有创建组件/addElement/addChild代码移到构造函数中。 创建变量以存储对这些组件的引用。 在“设置数据”中,更改这些对象显示的数据,而不是创建新零部件。
你一直是最好的帮助,谢谢你的清晰和简洁的回答!我刚刚偶然发现了这个问题,我想对你的答案发表评论。虽然通常是正确的,但不应将元素的创建移动到构造函数中。正确的位置是createChildren方法。