2011-09-08 85 views
0

我有一個自定義組件,包含列表從爲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:

是的,我已經使用之前列表中的「改變」事件想說,但我有它激發的問題,即使單擊列表滾動條。

回答

1

Erm,yourList.addEventListener(MouseEvent.CLICK, onClick)?或者您可以在MXML中使用內聯事件。這聽取了列表中的所有點擊。

您可能想要讓自定義項呈示器擁有自己的點擊處理程序,並派發自定義事件,讓您可以在顯示列表中偵聽它,因此它可以更具體。

+0

不,我已經嘗試將CLICK監聽器添加到列表之前,即使當我單擊列表滾動條時,它也會派發我的自定義事件。 –

+0

是的,這就是點擊工作原理。您需要使用條件來查看它是否是您的項目渲染器被點擊:if(event.target is Game)',或者只是讓您的自定義項目渲染器偵聽點擊自身並分派自定義事件本身。 –

+0

對於第二個選項(向Game類添加「click」偵聽器) - 如何將自定義PrefEvent 2級別傳遞給(包含List的自定義大廳組件的父級)? –