2

在下面的简单 Flex 移动测试用例中,为什么图标在列表中不可见?

截屏:

在此处输入图像描述

App.mxml(只需添加到 Flash Builder 4.7 中的空白 Flex 移动项目):

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               applicationDPI="160">
    <fx:Declarations>
        <s:MultiDPIBitmapSource id="EN_ICON"
                source160dpi="@Embed('low-res/en_US.png')"
                source240dpi="@Embed('mid-res/en_US.png')"
                source320dpi="@Embed('high-res/en_US.png')"/>
        <s:MultiDPIBitmapSource id="RU_ICON"
                source160dpi="@Embed('low-res/ru_RU.png')"
                source240dpi="@Embed('mid-res/ru_RU.png')"
                source320dpi="@Embed('high-res/ru_RU.png')"/>
        <s:MultiDPIBitmapSource id="DE_ICON"
                source160dpi="@Embed('low-res/de_DE.png')"
                source240dpi="@Embed('mid-res/de_DE.png')"
                source320dpi="@Embed('high-res/de_DE.png')"/>
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            private const LANGUAGES:ArrayCollection = new ArrayCollection([
                { icon: EN_ICON, locale: 'en_US', label: 'English' },
                { icon: RU_ICON, locale: 'ru_RU', label: 'Русский' },
                { icon: DE_ICON, locale: 'de_DE', label: 'Deutsch' }
            ]);
        ]]>
    </fx:Script> 

    <s:List 
        width="100%" 
        height="100%"
        dataProvider="{LANGUAGES}">
        <s:itemRenderer>
            <fx:Component>
                <s:IconItemRenderer labelField="label" iconField="icon" />
            </fx:Component>
        </s:itemRenderer>
    </s:List>
</s:Application>

图标(由用户koppi @ openclipart.org提供并放置在子目录中:src/low-res、src/mid-res、src/high-res):

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

4

2 回答 2

2

问题是您的LANGUAGES数组集合是在创建 3 个MultiDPIBitmapSource对象之前创建的。所以实际上,dataProvider 中的每个元素都null在该icon字段中。

顺便说一句,我不知道<fx:Declarations>标签中的对象将在组件生命周期的哪个时间点创建,但我知道它们应该在“creationComplete”事件被调度时创建。事实上,正如 OP 所确认的那样,声明标签中的对象在调度“初始化”事件时已经创建。

如果您LANGUAGES在“creationComplete”事件处理程序中创建数组集合,它将正常工作。

于 2013-06-04T07:30:09.317 回答
-1

我不完全确定这是否能解决您的问题,但每当我使用 Embed 时,我都会像这样使用它:

@Embed(source='GenericImageFileName.png')

于 2013-06-03T18:20:19.673 回答