【问题标题】:Spark list not displaying selection when an item is removed删除项目时火花列表不显示选择
【发布时间】:2011-08-03 19:46:50
【问题描述】:

我遇到了 Spark 列表的问题,我试图确保始终选择某个项目并确保 GUI 将其显示给用户。

应用程序(下面的完整代码)创建一个列表、一个标签和一个按钮。标签说明在列表中选择的内容。该按钮删除选定的项目。更改选择,更新标签中的文本。 重要提示:List 将“requireSelection”设置为 true,以确保始终选择项目。

如果我选择列表中的第一项,则选择会正确反映在标签中。单击“删除”将删除该项目并选择下一个项目。这一切正常。

如果我选择第一个以外的任何项目,然后单击“删除”,列表将显示为好像没有选择一样。但是,标签显示第一个项目已被选中。如果我尝试选择项目 1(通过单击它),似乎什么都没有发生(即该项目看起来没有被选中)。如果我单击任何其他项目,它会正确选择并且列表似乎再次开始工作。

帮助。这是一个错误还是我需要手动“踢”列表?我应该使用“requireSelection”来强制选择吗?

谢谢,

菲尔

<?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" 
           xmlns:mx="library://ns.adobe.com/flex/mx"
           initialize="init()">

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

    private function init():void {
        myList.addEventListener(FlexEvent.VALUE_COMMIT, updateSelectionLabel);

        var ac:ArrayCollection = new ArrayCollection()
        ac.addItem("Adam");
        ac.addItem("Bob");
        ac.addItem("Charlie");
        ac.addItem("Dave");
        myList.dataProvider = ac;
    }

    private function updateSelectionLabel(event:Event):void {
        selectedItemLabel.text = myList.selectedItem.toString();
    }

    protected function removeClicked(event:MouseEvent):void {
        myList.dataProvider.removeItemAt( myList.selectedIndex );
    }

    ]]>
    </fx:Script>

    <s:List id="myList" x="10" y="10" width="300" height="120"
        requireSelection="true"/>
    <s:Label x="10" y="140" id="selectedItemLabel" text="-selectedItem-"/>
    <s:Button x="10" y="160" label="Remove Selected Item" click="removeClicked(event)"/>
</s:Application>

【问题讨论】:

    标签: list apache-flex selection flex-spark


    【解决方案1】:

    由于某种原因,火花列表中的 dataProviderRefreshed 操作将当前插入符号索引设置为 NO 索引。为什么?我不完全确定,但无论如何,解决方案很简单。

    protected function removeClicked(event:MouseEvent):void {
        if(myList.dataProvider.length>1){
            var delIndex:int = myList.selectedIndex;
            myList.selectedIndex = 0;
            myList.dataProvider.removeItemAt( delIndex );
       }
    }
    

    只需在删除之前将索引设置为 0,然后插入符号始终设置正确。

    我的代码还假设您不能删除 LAST 索引,否则您将不会选择任何内容。但如果你愿意,你可以改变它。

    【讨论】:

    • 我刚刚更新了我的代码 sn-p,我之前的代码总是删除列表中的第一项。更新后的代码会删除当前选定的项目。对此感到抱歉。
    猜你喜欢
    • 2011-09-26
    • 2011-03-24
    • 1970-01-01
    • 2020-07-23
    • 2013-12-27
    • 2016-04-26
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多