Flex - Tilelist с первым элементом как Button, а все остальные как Image

Мне нужна помощь с чем-то, мне нужен TileList, в котором в первой позиции / элементе есть кнопка, а во всех других элементах - изображение для каждого. Ну, после проблем с темой Plastic и s:List (проблема со списком скроллера) я сдался и начал работать с TileList. Я использую пользовательский элемент Renderer для TileList. Это довольно просто, но я думаю, что делаю что-то не так.

DataProvider для TileList в ArrayCollection состоит из первого элемента класса String, а все остальные являются пользовательским классом, расширяющим класс Image. например: arr=["bt",Image,Image.....];

Я не знаю почему, но мой 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 ответ

Решение

Похоже, проблема виртуального макета. Это означает, что рендерер используется повторно. Если они не будут повторно инициализированы (например, удалите ваш элемент bt), могут произойти подобные вещи. Кроме того, я предлагаю вам переопределить данные публичной функции (значение:Object):void и поместить туда свой код. Вы также можете отключить виртуальный макет, если вы действительно этого хотите (useVirtualLayout = false в вашей группе данных / списке).

У меня не так много времени, чтобы объяснить это в данный момент, но я предлагаю вам взглянуть на свойство itemRendererFunction группы данных. Эта функция возвращает ClassFactory, определяющий тип средства визуализации элементов для использования в зависимости от данных.

Вот ссылка на это из ссылок Adobe: Работа с визуализаторами элементов. См. Раздел "Использование функции визуализации элементов с контейнером Spark".

Другие вопросы по тегам