OnMenuItemSelected не вызывается, когда макет установлен для пункта меню
У меня есть меню, которое накачивается из main_menu.xml:
<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 элемента меню, он работает нормально. Как я могу это исправить?
Спасибо.
Ответы
Ответ 1
вы должны использовать ниже фрагмент (только для справки)
@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;
}
Ответ 2
В дополнение к ответу, предоставленному Vipul Shah.
Удостоверьтесь, что вы отключили возможность просмотра всех элементов в макете действий:
android:clickable="false"
В противном случае он может украсть клик, чтобы вы все еще не могли получить обратный вызов onClick.