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

时间:2012-02-09 14:50:57

标签: flex itemrenderer tilelist

我需要帮助 我需要一个TileList,它在第一个位置/项目中有一个按钮,在所有其他项目中都有一个图像。 好吧,在遇到Plastic theme和s:List(滚动条列表的问题)问题后,我放弃了并开始使用TileList。 我正在为TileList使用自定义项Renderer。这很简单,但我认为我做错了。

由String类第一项组成的ArrayCollection中TileList的dataProvider,以及所有其他类扩展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}"/>

我真的很感激,如果有人可以提供帮助......我在互联网上一无所获。

谢谢!

1 个答案:

答案 0 :(得分:0)

似乎是一个虚拟布局问题。这意味着渲染器可以重复使用。如果它们没有重新初始化(例如:删除你的bt元素),这样的事情就会发生。另外,我建议你覆盖公共函数数据(value:Object):void并将你的代码放在那里。如果您真的想要(在DataGroup / List上使用VirtualLayout = false),也可以禁用虚拟布局。

我目前没有太多时间解释它,但我建议您查看DataGroup的itemRendererFunction属性。此函数返回一个ClassFactory,它定义要使用的项呈示器的类型,具体取决于数据。

以下是Adobe参考文献中的链接:Working with item renderers。请参阅“使用带有Spark容器的项呈示器功能”部分。