代码之家  ›  专栏  ›  技术社区  ›  Assaf Lavie

为什么SelectedIndex不能在Flex4中每隔一段时间工作一次?

  •  1
  • Assaf Lavie  · 技术社区  · 14 年前

    在下面的工作示例中,每当文本框更改时,列表的选定索引都应重置为0。

    但是,由于某些奇怪的原因,每隔一次击键,所选项目就会消失,然后在随后的击键时重新出现。

    <?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" minWidth="955" minHeight="600">
        <fx:Script>
            <![CDATA[
                import mx.collections.ArrayList;
                import mx.core.UIComponent;
                import mx.events.FlexEvent;
    
                import spark.effects.Scale;
                import spark.events.TextOperationEvent;
    
                [Bindable]
                public var items : ArrayList;
    
                protected function textinput1_changeHandler(event:TextOperationEvent):void
                {
                    items = new ArrayList(input.text.split(" "));
                    list.selectedIndex = 0;
                }
            ]]>
        </fx:Script>
        <s:TextInput x="165" y="124" change="textinput1_changeHandler(event)" id="input" text="a few words"/>
        <s:List x="165" y="184" width="433" height="291" dataProvider="{items}" id="list"></s:List>
    </s:Application>
    
    4 回复  |  直到 14 年前
        1
  •  0
  •   Lavir the Whiolet    14 年前

    首先你应该检查“字符串。拆分“功能。它有几个虫子,我不记得了。在像“”或“blah”(结尾的空格)这样的序列中尝试。

        2
  •  0
  •   rekaszeru    13 年前

    问题是,在设置所选索引时,列表尚未呈现。

    textinput1_changeHandler

    protected function textinput1_changeHandler(event:TextOperationEvent):void
    {
        items = new ArrayList(input.text.split(" "));
        callLater(function():void{list.selectedIndex = 0;});
    }
    
        3
  •  0
  •   Mike    13 年前

    首先将数据提供程序的刷新添加到函数中,以便它接收更改:

    protected function textinput1_changeHandler(event:TextOperationEvent):void
    {
         items = new ArrayList(input.text.split(" "));
         (list.dataProvider as ArrayCollection).refresh();
         list.selectedIndex = 0;
    }
    
        4
  •  0
  •   Randy    13 年前

    来回的原因是,事件只是随着索引的更改而创建的,签出listbase setselectedindex;

    将selectedindex更改为0之前的修复方法是先将其更改为-1,然后再更改为0。

    /**
     *  @private
     *  Used internally to specify whether the selectedIndex changed programmatically or due to 
     *  user interaction. 
     * 
     *  @param dispatchChangeEvent if true, the component will dispatch a "change" event if the
     *  value has changed. Otherwise, it will dispatch a "valueCommit" event. 
     */
    mx_internal function setSelectedIndex(value:int, dispatchChangeEvent:Boolean = false):void
    {
        if (value == selectedIndex)
            return;
    
        if (dispatchChangeEvent)
            dispatchChangeAfterSelection = dispatchChangeEvent;
        _proposedSelectedIndex = value;
        invalidateProperties();
    }
    
    推荐文章