Как обработать событие нажатия в элементе управления Spark List в Flex 4 - PullRequest
5 голосов
/ 20 февраля 2010

У меня как: список компонентов.Я хочу обработать событие щелчка, чтобы узнать, какой элемент списка выбран.Я не вижу события Click в s: List.Есть обходные пути?

Спасибо.

Ответы [ 7 ]

10 голосов
/ 10 ноября 2010

Я знаю, что опоздал на вечеринку, но самый простой способ получить выбранный узел из списка в событии щелчка - это использовать свойство currentTarget.

function myClickHandler(event:MouseEvent):void{
   Alert.show("My Var: " + event.currentTarget.selectedItem.myVar);
}

<s:List ... click="myClickHandler(event);">
...
</s:List>

см

http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7cdb.html

4 голосов
/ 03 мая 2011

Вы можете использовать IndexChangeEvent.CHANGE в Списке http://docs.huihoo.com/flex/4/spark/events/IndexChangeEvent.html

Пакет spark.events Класс открытый класс IndexChangeEvent Наследование IndexChangeEvent Объект события

Языковая версия: ActionScript 3.0 Версия продукта: Flex 4 RuntimeВерсии: Flash Player 10, AIR 1.5

Класс IndexChangeEvent представляет события, отправляемые при изменении индекса в компоненте Spark.

См. Также

spark.components.supportClasses.ListBase spark.components.List spark.components.ButtonBar

1 голос
/ 30 октября 2012

Спасибо, ребята,

Просто убедитесь, что у вашего List есть переменная id.Затем вы вызываете функцию-обработчик кликов следующим образом:

private function listClickHandler(event:IndexChangeEvent) {
    if(myListsID.seletectedIndex == 0){
        navigator.pushView(whateverViewyouwant)
    } else if(myListsID.selectedIndex ==1){
        navigator.pushView(changetoanotherview)
    } else if(myListsID.selectedIndex == 2){
        navigator.pushView(mobileViewsareEasy)
    } else if(myListsID.selectedIndex == 3){
        navigator.pushView(wowSomanyViews)
    }  

}

Переменная, которая входит в функцию pushView, соответствует имени файла mxml для представления, которое вы хотите загрузить

1 голос
/ 28 марта 2011

Другой способ:

    <s:List id="myid"
            dataProvider="{listDP}"
            width="100%"
            height="100%"/>

после завершения создания приложения:

myid.addEventListener(MouseEvent.CLICK,clickHandler);

Обработчик:

  private function clickHandler(event:MouseEvent):void
      {
        if(myid.selectedIndex>=0)
        { 
         ...
        }
          myid.selectedIndex=-1;//to detect click on same item

      }
1 голос
/ 03 марта 2010

Я понял, как это сделать. Думал, что поделюсь, чтобы это помогло другим, таким как я:

<s:List id="taskList" creationComplete="taskList.addEventListener('listClickEvent',handleListClick);" width="100%" height="80%" labelField="description" dataProvider="{todoList}" 
        useHandCursor="true">
    <s:itemRenderer>
        <fx:Component>
            <s:ItemRenderer click="handleClick(event)">
                <fx:Script>
                    <![CDATA[
                        import ListClickEvent;

                        import flash.events.MouseEvent;

                        import mx.controls.Alert;
                        private function handleClick(me:MouseEvent):void
                        {
                            var listClickEvent:ListClickEvent = new ListClickEvent("listClickEvent");
                            listClickEvent.index = itemIndex;
                            owner.dispatchEvent(listClickEvent);
                        }
                    ]]>
                </fx:Script>
                <s:Label text="{data.description}" top="5" bottom="5" right="3" left="3"/>
            </s:ItemRenderer>
        </fx:Component>
    </s:itemRenderer>
</s:List>   
0 голосов
/ 27 августа 2013
<s:List id="lstDesc"  width="100%" height="100%">

    <s:change>                  
        Descselected();//do your stuff here
    </s:change>

</s:List>

во Flash Builder.

0 голосов
/ 03 августа 2011

Это намного сложнее, вот лучший способ:

<s:List id="whatever" dataProvider="{allMyData}" click="whateverList_click(event)">    </s:List>
<fx:Script>
 var whatWasClicked:String = whatever.dataProvider.getItemAt(whatever.selectedIndex).label;
</fx:Script>

Бу я.

...