Flex-Tilelist,第一项为Button,所有其他项为Image



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

ArrayCollection中TileList的dataProvider由String类的第一个项组成,其他所有项都是扩展Image class的自定义类。比如:arr=["bt",图像,图像…..];

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

我的自定义ItemRenderer:

<?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元素),可能会发生这样的事情。此外,我建议您重写公共函数data(value:Object):void,并将代码放在其中。如果您真的想禁用虚拟布局,也可以禁用(在DataGroup/List上使用VirtualLayout=false)。

我现在没有太多时间来解释它,但我建议您查看DataGroup的itemRendererFunction属性。此函数返回一个ClassFactory,该ClassFactory根据数据定义要使用的项渲染器的类型。

以下是Adobe参考资料中的链接:使用项目渲染器。请参阅"将项渲染器函数与Spark容器一起使用"一节。

最新更新