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

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

问题描述:

我有一个自定义组件,包含列表从为XMLListCollection显示项目:检测鼠标点击spark.components.List项目,却忽略箭头键

 [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

我的问题是,该变化 - 活动监听器不仅发射,当一个项目是通过鼠标单击,而且当按下键盘上的箭头键:

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

另外,如果我点击两次,只有1点击鼠标将导致派遣我的自定义事件(因为显然没有变化的项目之间)。

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

UPDATE:

是的,我已经使用之前列表中的“改变”事件想说,但我有它激发的问题,即使单击列表滚动条。

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

您可能想要让自定义项呈示器拥有自己的点击处理程序,并派发自定义事件,让您可以在显示列表中侦听它,因此它可以更具体。

+0

不,我已经尝试将CLICK监听器添加到列表之前,即使当我单击列表滚动条时,它也会派发我的自定义事件。 –

+0

是的,这就是点击工作原理。您需要使用条件来查看它是否是您的项目渲染器被点击:if(event.target is Game)',或者只是让您的自定义项目渲染器侦听点击自身并分派自定义事件本身。 –

+0

对于第二个选项(向Game类添加“click”侦听器) - 如何将自定义PrefEvent 2级别传递给(包含List的自定义大厅组件的父级)? –