12

Mam menu, które jest pompowana z main_menu.xml:OnMenuItemSelected nie jest wywoływana, gdy układ jest ustawiony na pozycji menu

<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> 

i Oto kod aktywności:

@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); 
} 

Ale onOptionsItemSelected nie jest wywoływany po dotknięciu elementu menu. Po usunięciu atrybutu actionLayout pozycji menu działa poprawnie. Jak mogę to naprawić?
Dzięki.

Odpowiedz

26

należy skorzystać z poniższego fragmentu (tylko dla odniesienia)

@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

Dzięki. Już testowałem 'item.setOnMenuItemClickListener', ale nie zadziałało. Chodziło o to, aby uzyskać mój niestandardowy widok i ustawić na nim clickListener. Dzięki za twoją pomoc :) chociaż onClick() nie powinien być adnotowany przez @Override. Edytuję twoją odpowiedź na wersję, która działa, a także jest nieco bardziej strawna;) –

+0

dziękuję Vipul :) – Ranjit

+0

To jest jedyne rozwiązanie, które zadziałało dla mnie. Próbowałem setOnMenuItemClickListener, onMenuItemSelected, itp. – crubio

21

Oprócz odpowiedzi dostarczonych przez Vipul Shah.

Upewnij się wyłączyć opcję klikalny wszystkich elementów w układzie Działanie:

android:clickable="false" 

przeciwnym razie może ukraść kliknięcia, dzięki czemu wciąż nie mogę odbierać onClick oddzwonić.

+1

godzin wyszukiwania. Dzięki! –

+0

Uratowałem moje życie ...! Bez tego odpowiedź nie zadziałałaby ... Dzięki! –

+0

Wielkie dzięki. Uratował mnie przed zabiciem bólu pleców :) –

Powiązane problemy