Я хочу основываться на ответе Мики.
Я использовал только
registerForContextMenu(this.getListView());
и
this.getListView().setOnCreateContextMenuListener(this);
в моем родительском классе ListActivity.
Я переместил свой код из метода onContextItemSelected (элемент MenuItem) в метод onMenuItemSelected .
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
try {
if (item.getItemId() == R.id.new_entry_menu_option) {
...
}
...
if (item.getItemId() == R.id.quit) {
/* perform cleanup */
...
return true;
} else if (item.getItemId() == R.id.delete_entry_context_menu_option) {
displayConfirmRequest(DELETE_CONFIRMATION_MESSAGE, item);
return true;
} else if (item.getItemId() == R.id.2ND_CONTEXT_OPTION) {
//code for 2nd option
return true;
} else if (item.getItemId() == R.id.3RD_CONTEXT_OPTION) {
//code for 3RD option
return true;
} else {
return super.onMenuItemSelected(featureId, item);
}// end if/else if/else
}// end try
catch (Exception error) {
//error handler code
return false;
}// end try/catch
}// end onMenuItemSelected
И убедитесь, что в вашем подклассе, есливы переопределяете onMenuItemSelected в подклассе вашего super.ListActivity , чтобы включить следующий код, если вы хотите, чтобы опции contextmenu обрабатывались в super.class.
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (<condition>) {
...
} else {
return super.onMenuItemSelected(featureId, item);
}
}// end onMenuItemSelected