通过调用MenuItem.etOnMenuItemClickListener方法可以设置菜单项的单击事件,该方法有一个OnMenuItemClickListener类型的参数,处理菜单项的单击事件类必须实现OnMenuItemClickListener接口。下面的代码为"删除"菜单项设置了单击事件。广州网站建设
- public class Main extends Activity implements OnMenuItemClickListener
- {
- // 菜单项单击事件方法
- @Override
- public boolean onMenuItemClick(MenuItem item)
- {
- // 在这里编写菜单项单击事件的代码,可根据 item参数的getItemId方法来确定单击的是哪个菜单项
- return true;
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- MenuItem deleteMenuItem = menu.add(1, 2, 2, "删除");
- deleteMenuItem.setIcon(R.drawable.delete);
- deleteMenuItem.setOnMenuItemClickListener (this); // 设置“删除”菜单项的单击事件
- }
- }
除了设置菜单项的单击事件外,还可以使用Activity类的onOptionsItemSelected和onMenuItemSelected方法来响应菜单项的单击事件。这两个方法的定义如下:
广州网站建设
- public boolean onOptionsItemSelected(MenuItem item);
- public boolean onMenuItemSelected(int featureId, MenuItem item);
这两个方法都有一个item参数,用于传递被单击的菜单项的MenuItem对象。可以根据MenuItem接口的相应方法(例如,getTitle方法和getItemId方法)判断单击的是哪个菜单项。广州网站建设
既然有3种响应菜单项单击事件的方法,就会产生一个问题:如果同时使用这3种方法,它们都会起作用吗?如果都起作用,那么调用顺序如何呢?实际上,当onMenuItemClick方法返回true时,另两种单击事件的响应方式都会失效,也就是说,单击菜单项时,系统不会再调用onOptionsItemSelected和onMenuItemSelected方法了。如果未设置菜单项的单击事件(onMenuItemClick方法),而同时使用了另外两种响应单击事件的方式,系统会根据在onMenuItemSelected方法中调用父类(Activity类)的onMenuItemSelected方法的位置来决定先调用onOptionsItemSelected方法还是先调用onMenuItemSelected方法。广州网站建设
- // 如果将super.onMenuItemSelected(...)放在Log.d(...)后面调用,
- // 系统会在执行完onMenuItemSelected方法中的代码后再调用onOptionsItemSelected方法
- @Override
- public boolean onMenuItemSelected(int featureId, MenuItem item)
- {
- super.onMenuItemSelected(featureId, item);// 这条语句调用了onOptionsItemSelected方法
- Log.d("onMenuItemSelected:itemId=", String. valueOf(item.getItemId()));
- return true;
- }



