обновите itemrenderer каждого элемента в компоненте списка Flex - PullRequest
0 голосов
/ 01 марта 2012

У меня есть список, показанный ниже:

<s:List id="list2" width="100%" height="100%" dataProvider="{ recordingsShown }"
                itemRenderer="components.VideoItemRenderer2"
                selectedIndex="0" visible="false">

            <s:layout>

                <s:TileLayout id="tilelayout"
                              useVirtualLayout="true"
                              orientation="columns" 
                              columnAlign="justifyUsingWidth" rowAlign="justifyUsingHeight"
                              requestedColumnCount="3"
                              requestedRowCount="2"
                              paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"
                              verticalGap="10" horizontalGap="10" />

            </s:layout>

</s:List>

, который отображает в ячейках имя, дату и изображение для предварительного просмотра для каждого из видео, содержащихся в массиве записей записей, показанных как поставщик данных. Проблема в том, что при добавлении нового видео я сохраняю изображение предварительного просмотра в папке, а узел, описывающий его, в xml и помещаю новый элемент в коллекцию массива с помощью

.
recordingsShown.addItemAt(newRecording,0);

это добавлено на сцене, но изображение предварительного просмотра последнего добавленного видео не показывается! Как я могу перерисовать весь список, чтобы показать его?

Вот мой itemRenderer:

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
            xmlns:s="library://ns.adobe.com/flex/spark"
            xmlns:mx="library://ns.adobe.com/flex/mx"
            width="400" height="300" autoDrawBackground="true">

<fx:Metadata>
    [Event(name="playClicked", type="flash.events.Event")]
</fx:Metadata>

<fx:Script>
    <![CDATA[
        import flash.filters.GlowFilter;

        import mx.controls.Alert;
        import mx.events.FlexEvent;
        import mx.formatters.DateFormatter;




        protected function img_rollOverHandler(evt:MouseEvent):void {
            Image(evt.currentTarget).filters = [new GlowFilter(0xf7941d)];
            Image(evt.currentTarget).alpha = 0.9;
        }

        protected function img1_rollOutHandler(evt:MouseEvent):void {
            Image(evt.currentTarget).filters = [];
            Image(evt.currentTarget).alpha = 1;
        }

        protected function playClickHandler(event:MouseEvent):void
        {

            dispatchEvent(new Event("playClicked",true,true));

        }

    ]]>
</fx:Script>

<fx:Declarations>
    <s:DateTimeFormatter id="dateTimeFormatter"
                      dateTimePattern="DD.MM.YYYY HH.NN.SS"/>
</fx:Declarations>

    <s:states>
        <s:State name="normal" />
        <s:State name="hovered" />
        <s:State name="selected" />
    </s:states>

    <s:Rect width="100%" height="100%" radiusX="5" radiusY="5">
        <s:filters>
            <s:DropShadowFilter alpha="0.32" alpha.hovered="0.5" blurX="5" blurY="5" distance="2" />
        </s:filters>
        <s:fill>
            <s:LinearGradient rotation="90">
                <s:GradientEntry color="0x323232" color.selected="black"/>
                <s:GradientEntry color="#7f7f7f" color.selected="0x333333"/>                
            </s:LinearGradient>
        </s:fill>
        <s:stroke>
            <s:SolidColorStroke color="#ffffff" color.hovered="#f7941d" color.selected="#ed7f09" caps="none" weight="2" joints="miter" miterLimit="4"/>
        </s:stroke>
    </s:Rect>

    <s:Label left="10" top="10"
             fontStyle="italic"
             fontWeight="bold"
             color="#f7941d" 
             text="{dateTimeFormatter.format(data.date)}"/>

    <s:Label left="10" top="25" 
             fontSize="16" 
             fontWeight="bold"
             color="#ffffff"
             text="{data.name}"/>       
    <s:Image id="previewImg" left="10" right="10" bottom="10" top="55" scaleMode="stretch" smooth="true"
             source="http://localhost:5080/thumbs/{data.thumb}" /> 
            <!--   source="assets/img.jpg"/> -->             

    <s:Image source="assets/play.png"
             rollOver="img_rollOverHandler(event);"
             rollOut="img1_rollOutHandler(event);" 
             x="136" y="102"
             click="playClickHandler(event)"
             complete="this.invalidateSize()"/>
</s:ItemRenderer>

1 Ответ

0 голосов
/ 02 марта 2012

Я обнаружил, что, похоже, проблема с привязкой данных и Spark Image. Попробуйте добавить это к корневому тегу:

 dataChange="yourImage.validateNow();

Если это не сработает, задайте весь путь в dataChange.

...