12

Ho un menù che viene gonfiato da main_menu.xml:OnMenuItemSelected non viene chiamato quando il layout è impostato per la voce di 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> 

ed ecco il codice nell'attività:

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

Ma onOptionsItemSelected non viene chiamato quando tocco la voce di menu. Quando rimuovo l'attributo actionLayout della voce di menu, funziona correttamente. Come posso risolvere questo?
Grazie.

risposta

26

si dovrebbe usare sotto frammento (Solo per riferimento)

@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

Grazie. Ho già testato 'item.setOnMenuItemClickListener' ma non ha funzionato. Il punto era quello di ottenere la mia vista personalizzata e impostare clickListener su di esso. Grazie per il tuo aiuto :) anche se onClick() non dovrebbe essere annotato da @Override. Modifico la tua risposta alla versione che funziona, ed è anche un po 'più digerente;) –

+0

grazie Vipul :) – Ranjit

+0

Questa è l'unica soluzione che ha funzionato per me. Ho provato setOnMenuItemClickListener, onMenuItemSelected, ecc. – crubio

21

In aggiunta alla risposta fornita da Vipul Shah.

Assicurarsi che si disattiva l'opzione cliccabile di tutti gli elementi nel layout azione:

android:clickable="false" 

In caso contrario, si può rubare il clic in modo che si riceve ancora cant onClick richiamare.

+1

. Grazie! –

+0

Salvato la mia vita ...! Senza questo la risposta non funzionerebbe ... Grazie! –

+0

Grazie mille. Mi ha salvato dall'uccidere il mal di schiena :) –

Problemi correlati