检测鼠标单击spark.components.List项目,但忽略箭头键

时间:2011-09-08 01:58:51

标签: flex events list flex4 flex4.5

我有一个自定义组件,其中包含一个显示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名玩家的可加入游戏):

enter image description here

我的问题是,更改 -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));
        }

此外,如果我点击两次,只需点击一下鼠标就会调度我的自定义事件(因为很明显项目之间没有更改)。

有人请知道,如何让我的列表只对鼠标点击做出反应?

更新

是的,我之前尝试过对“List”使用“更改”事件,但是我遇到了问题,即使单击了列表滚动条也会触发它。

1 个答案:

答案 0 :(得分:1)

呃,yourList.addEventListener(MouseEvent.CLICK, onClick)?或者您可以在MXML中使用内联事件。这会侦听列表中的所有点击。

您可能希望只有一个自定义项目渲染器拥有它自己的单击处理程序并调度一个自定义事件,该事件可以在显示列表中监听它,因此它可以更具体。