Обнаружить щелчок мышью по элементам spark.components.List, но игнорировать клавиши со стрелками

У меня есть пользовательский компонент, содержащий список, отображающий элементы из коллекции XMLListCollection:

        [Bindable]
        private var _games:XMLListCollection = new XMLListCollection();

...

        <s:List itemRenderer="Game" dataProvider="{_games}"
          change="gameClicked(event)">
            <s:layout>
                <s:TileLayout />
            </s:layout>
        </s:List>

где XML-данные могут выглядеть так:

              <game id="0"/>
              <game id="9012">
                <user id="VK48058967" />
                <user id="MR14315189992643135976" />
                <user id="OK10218913103" />
              </game>
              <game id="9013">
                <user id="OK151358069597" />
                <user id="OK515549948434" />
              </game>

и такой скриншот (представляющий присоединяемые игры с участием до 3 игроков):

введите здесь описание изображения

Моя проблема в том, что прослушиватель change-Event срабатывает не только при щелчке мышью по элементу, но и при нажатии клавиш со стрелками на клавиатуре:

        private function gameClicked(event:IndexChangeEvent):void {
            var game:XML = event.currentTarget.selectedItem as XML;
            if (game == null)
                return;
            Alert.show("Clicked game: " + game.@id);
            dispatchEvent(new PrefEvent(PrefEvent.GAME_CLICKED, game.@id));
        }

Кроме того, если я щелкну дважды, только 1 щелчок мыши вызовет отправку моего пользовательского события (поскольку, очевидно, между элементами нет change).

Кто-нибудь знает, как заставить мой список реагировать только на щелчки мыши?

ОБНОВЛЕНИЕ:

Да, я пытался использовать событие «изменить» для списка раньше, но потом у меня возникла проблема, что оно срабатывает, даже если щелкнуть полосу прокрутки списка.


person Alexander Farber    schedule 08.09.2011    source источник


Ответы (1)


Эм, yourList.addEventListener(MouseEvent.CLICK, onClick)? Или вы можете просто использовать встроенное событие в MXML. Это отслеживает все клики в списке.

Возможно, вы захотите, чтобы пользовательский рендерер элементов имел собственный обработчик кликов и отправлял пользовательское событие, которое всплывает, где вы можете его прослушать вверх по списку отображения, чтобы оно могло быть более конкретным.

person J_A_X    schedule 08.09.2011
comment
Нет, я пытался добавить прослушиватель CLICK в список раньше, и он отправлял мое пользовательское событие, даже когда я нажимал на полосу прокрутки списка. - person Alexander Farber; 08.09.2011
comment
Да, именно так работает клик. Вам нужно использовать условное выражение, чтобы увидеть, щелкнул ли ваш рендерер элемента: if(event.target is Game), или просто пусть ваш пользовательский рендерер элемента прослушивает щелчки и сам отправляет это пользовательское событие. - person J_A_X; 08.09.2011
comment
Для второго варианта (добавление прослушивателя кликов в класс Game) — как мне передать пользовательские уровни PrefEvent 2 вверх (родителю моего пользовательского компонента лобби, который содержит список)? - person Alexander Farber; 08.09.2011
comment
@Alexander установил bubbles=true при создании мероприятия и добавил в лобби следующий тег метаданных: [Event(name="gameClicked", type="com.farber.event.PrefEvent")] - person Jacob Eggers; 08.09.2011
comment
Добавить метаданные в лобби (содержащее список) или в игру (рендерер элемента, по которому нужно щелкнуть)? - person Alexander Farber; 08.09.2011