12

私はmain_menu.xmlから膨張されるメニューがあります。OnMenuItemSelectedは呼び出されません

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/act_sync" 
     android:showAsAction="always" 
     android:actionLayout="@layout/sync_action" 
     android:icon="@android:drawable/ic_popup_sync" /> 
</menu> 

を、ここで活動中のコードです:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    MyMessageHandler.debug("menu item selected"); 
    switch(item.getItemId()){ 
    case R.id.act_sync: 
     sync(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

をしかし、メニュー項目をタッチするとonOptionsItemSelectedは呼び出されません。メニュー項目のactionLayout属性を削除すると、正常に動作します。これをどうすれば解決できますか?
ありがとうございます。

答えて

26

あなたはVipulシャーが提供する答えに加えて(参考まで)スニペットの下

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_menu, menu); 
     final Menu m = menu; 
     final MenuItem item = menu.findItem(R.id.ActionConnection); 
     item.getActionView().setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       sync(); 
      } 
     }); 
     return true; 
    } 
+3

ありがとうございました。私はすでに 'item.setOnMenuItemClickListener'をテストしましたが、うまく動作しませんでした。ポイントは私のカスタムビューを取得し、それにclickListenerを設定することでした。助けてくれてありがとう:)でも、onClick()に@Overrideで注釈を付けるべきではありません。私は、動作するバージョンへのあなたの応答を編集し、もう少しダイジェストです;) –

+0

Vipulに感謝します:) – Ranjit

+0

これは私のために働いた唯一の解決策です。私はsetOnMenuItemClickListener、onMenuItemSelectedなどを試しました – crubio

21

を使用する必要があります。

あなたは、アクションのレイアウト内のすべての項目のクリック可能なオプションを無効にしていることを確認してください:あなたはまだカントが受け取ることのonClickは、コールバックして

android:clickable="false" 

そうでなければ、それはクリックを盗むことがあります。

+1

時間検索。ありがとう! –

+0

保存された私の人生...! これがなければ答えはうまくいかないでしょう...ありがとう! –

+0

ありがとうございました。痛みを取り除くことから私を救った:) –