Apache flex Flex-Tilelist,第一项为按钮,所有其他项为图像

Apache flex Flex-Tilelist,第一项为按钮,所有其他项为图像,apache-flex,itemrenderer,tilelist,Apache Flex,Itemrenderer,Tilelist,我需要一些帮助 我需要一个TileList,在它的第一个位置/项目中有一个按钮,在所有其他项目中,每个按钮都有一个图像。 嗯,在塑料主题和s:List(滚动条列表的问题)出现问题后,我放弃了,开始使用TileList。 我正在为TileList使用自定义项目渲染器。这很简单,但我认为我做错了什么 ArrayCollection中TileList的数据提供程序由字符串类组成,第一个项和所有其他项是扩展Image类的自定义类。 比如: arr=[“bt”,图像,图像…] 我不知道为什么,但是我的Ti

我需要一些帮助 我需要一个TileList,在它的第一个位置/项目中有一个按钮,在所有其他项目中,每个按钮都有一个图像。 嗯,在塑料主题和s:List(滚动条列表的问题)出现问题后,我放弃了,开始使用TileList。 我正在为TileList使用自定义项目渲染器。这很简单,但我认为我做错了什么

ArrayCollection中TileList的数据提供程序由字符串类组成,第一个项和所有其他项是扩展Image类的自定义类。 比如: arr=[“bt”,图像,图像…]

我不知道为什么,但是我的TileList在它的第一个项目中显示了正确的按钮,但之后它会显示更多的2个项目图像,然后第四个项目有正确的图像但有一个按钮,这是一种模式…在3个正确的项目之后,下一个项目会有一个按钮

我的自定义项目渲染器:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"

     horizontalAlign="center"
     verticalAlign="middle"
     creationComplete="init()">
<mx:Script>
    <![CDATA[
        import mx.controls.Button;
    protected function init():void
    {
        if(this.data == "bt")
        {
            var bt:Button = new Button();
            bt.id = "btEnviar";
            bt.width=84;
            bt.height=28;
            bt.label = "Enviar Fotos"; 
            addElement(bt);

        }

    }
    ]]>
</mx:Script>
<mx:Image id="img" source = "{data}"/>

如果有人能帮忙,我真的很感激……我在网上什么也没找到


谢谢

似乎是一个虚拟布局问题。这意味着渲染器被重用。如果它们没有重新初始化(例如:删除你的bt元素),这样的事情就会发生。另外,我建议您重写公共函数数据(value:Object):void并将代码放在其中。如果确实需要,还可以禁用虚拟布局(在数据组/列表上使用virtuallayout=false)

我现在没有太多时间来解释它,但我建议您研究数据组的ItemRenderFunction属性。此函数返回一个类工厂,根据数据定义要使用的项呈现器的类型


以下是来自Adobe references的链接:。请参阅“将项目呈现器函数与Spark容器一起使用”部分。

您是否尝试重写commitProperties()并在其中添加代码,而不是使用initialize事件?nothing=/确实最糟糕,现在在第一个项目中出现了2个按钮。我真的认为您在做其他错误的事情。首先,请100%确定您了解渲染机制。听起来很无聊,但你会一直碰到项目渲染器问题。正如Exort所说,项目渲染器将被重新使用,因此,重要的是要说明如果
this.data!=“bt”
。理想情况下,添加else语句以检查按钮是否存在,并从显示中删除。另一种方法是向渲染器添加状态,并在设置数据时显式更改状态。i、 e
if(this.data==“bt”){this.currentState=“button”}else{this.currentState=“image”}