链接栏未突出显示所选索引

Linkbar is not hilighting the selected index

我有一个未突出显示所选 link 的链接栏。 LinkBar 有问题吗?

这是我的代码:

<mx:LinkBar id="languageTypeButtons" 
            selectedIndex="0"
            itemClick="languageType_changeHandler(null)"
            dataProvider="{languageTypes}">
</mx:LinkBar>

<s:ArrayList id="languageTypes">
    <fx:String>{MXML}</fx:String>
    <fx:String>{HTML}</fx:String>
    <fx:String>{ANDROID}</fx:String>
</s:ArrayList>


public static const HTML:String = "HTML";
public static const MXML:String = "MXML";
public static const ANDROID:String = "Android";

我使用的是 Flex 4.6,并且混合了 Spark 组件和 mx 组件。如果我在 LinkBar MXML 中设置 selectedIndex,那么它会在视觉上停留在该项目上。它以编程方式发生变化,并且 selectedIndex 显示正确的值。

更新:
无法弄清楚这一点,所以我正在使用 ButtonBar。不幸的是,如果您不设置 dataProvider 或将其设置为没有项目的 ArrayList,ButtonBar 似乎会挂起整个应用程序。

您必须使用 ViewStack 作为数据提供者:

 <s:VGroup>
    <mx:LinkBar id="languageTypeButtons"
                selectedIndex="0"
                itemClick="languageType_changeHandler()"
                dataProvider="{languageTypesViewStack}">
    </mx:LinkBar>
    <mx:ViewStack id="languageTypesViewStack" borderStyle="solid" width="100%" height="80%">
        <mx:Canvas id="htmlID" backgroundColor="#FFFFCC" label="{HTML}" width="100%" height="100%">
            <mx:Label text="HTML Selected" color="#000000"/>
        </mx:Canvas>
        <mx:Canvas id="mxmlID" backgroundColor="#CCFFFF" label="{MXML}" width="100%" height="100%">
            <mx:Label text="MXML Selected" color="#000000"/>
        </mx:Canvas>
        <mx:Canvas id="AndroidID" backgroundColor="#FFCCFF" label="{ANDROID}" width="100%" height="100%">
            <mx:Label text="Android Selected" color="#000000"/>
        </mx:Canvas>
    </mx:ViewStack>

</s:VGroup>

如果您真的想将字符串 ArrayList 用作数据提供者,那么这里有一个解决方法:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:mx="library://ns.adobe.com/flex/mx" >
<fx:Script><![CDATA[
    public static const HTML:String = "HTML";
    public static const MXML:String = "MXML";
    public static const ANDROID:String = "Android";

    private function languageType_changeHandler():void
    {
        var tempSelectedIndex:Number = languageTypeButtons.selectedIndex;
        for (var i = 0; i < languageTypes.length; i++)
        {
            languageTypeButtons.selectedIndex = i
            languageTypeButtons.validateNow();
        }
        languageTypeButtons.selectedIndex = tempSelectedIndex;
    }

    ]]></fx:Script>
<fx:Declarations>
    <s:ArrayList id="languageTypes">
        <fx:String>{MXML}</fx:String>
        <fx:String>{HTML}</fx:String>
        <fx:String>{ANDROID}</fx:String>
    </s:ArrayList>
</fx:Declarations>

<mx:LinkBar id="languageTypeButtons"
            selectedIndex="0"
            itemClick="languageType_changeHandler()"
            dataProvider="{languageTypes}">
</mx:LinkBar>

</s:Application>