12

Ich habe ein Menü, das von main_menu.xml aufgeblasen wird:OnMenuItemSelected wird nicht aufgerufen, wenn das Layout für Menüpunkt gesetzt

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

und hier ist der Code in der Aktivität:

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

Aber onOptionsItemSelected wird nicht aufgerufen, wenn ich den Menüeintrag berühre. Wenn ich das actionLayout-Attribut des Menüelements lösche, funktioniert es einwandfrei. Wie kann ich das beheben?
Danke.

Antwort

26

Sie unter Schnipsel (Just for reference) verwenden sollten

@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

Danke. Ich hatte bereits den 'item.setOnMenuItemClickListener' getestet, aber es hat nicht funktioniert. Der Punkt war, meine benutzerdefinierte Ansicht zu erhalten und clickListener darauf zu setzen. Danke für Ihre Hilfe :) obwohl das onClick() nicht von @Override kommentiert werden sollte. Ich bearbeite deine Antwort auf die Version, die funktioniert, und auch ein bisschen mehr Digest;) –

+0

danke Vipul :) – Ranjit

+0

Dies ist die einzige Lösung, die für mich arbeitete. Ich habe versucht SetOnMenuItemClickListener, OnMenuItemSelected, usw. – crubio

21

Neben der Antwort von Vipul Shah zur Verfügung gestellt.

Achten Sie darauf, die klickbaren Option aller Artikel im Aktionslayout deaktivieren:

android:clickable="false" 

Andernfalls kann es den Klick stehlen, so dass Sie kann immer noch nicht onClick zurückrufen erhalten.

+1

Stunden suchen. Vielen Dank! –

+0

rettete mein Leben ...! Ohne dies würde die Antwort nicht funktionieren ... Danke! –

+0

Vielen Dank. Rettete mich vor dem Töten von Rückenschmerzen :) –

Verwandte Themen