0 Comments

响应菜单的单击动作

发布于:2012-11-20  |   作者:广州网站建设  |   已聚集:人围观
响应菜单的单击动作

通过调用MenuItem.etOnMenuItemClickListener方法可以设置菜单项的单击事件,该方法有一个OnMenuItemClickListener类型的参数,处理菜单项的单击事件类必须实现OnMenuItemClickListener接口。下面的代码为"删除"菜单项设置了单击事件。广州网站建设


  1. public class Main extends Activity implements  OnMenuItemClickListener  
  2. {  
  3.     //  菜单项单击事件方法  
  4.     @Override  
  5.     public boolean onMenuItemClick(MenuItem item)  
  6.     {  
  7.         //  在这里编写菜单项单击事件的代码,可根据 item参数的getItemId方法来确定单击的是哪个菜单项  
  8.         return true;  
  9.     }  
  10.     @Override  
  11.     public boolean onCreateOptionsMenu(Menu menu)  
  12.     {  
  13.         MenuItem deleteMenuItem = menu.add(1, 2, 2, "删除");  
  14.         deleteMenuItem.setIcon(R.drawable.delete);  
  15.         deleteMenuItem.setOnMenuItemClickListener (this);    //  设置“删除”菜单项的单击事件  
  16.     }  
  17. }  

除了设置菜单项的单击事件外,还可以使用Activity类的onOptionsItemSelected和onMenuItemSelected方法来响应菜单项的单击事件。这两个方法的定义如下:

广州网站建设
  1. public boolean onOptionsItemSelected(MenuItem item);  
  2. public boolean onMenuItemSelected(int featureId, MenuItem item);  

这两个方法都有一个item参数,用于传递被单击的菜单项的MenuItem对象。可以根据MenuItem接口的相应方法(例如,getTitle方法和getItemId方法)判断单击的是哪个菜单项。广州网站建设

既然有3种响应菜单项单击事件的方法,就会产生一个问题:如果同时使用这3种方法,它们都会起作用吗?如果都起作用,那么调用顺序如何呢?实际上,当onMenuItemClick方法返回true时,另两种单击事件的响应方式都会失效,也就是说,单击菜单项时,系统不会再调用onOptionsItemSelected和onMenuItemSelected方法了。如果未设置菜单项的单击事件(onMenuItemClick方法),而同时使用了另外两种响应单击事件的方式,系统会根据在onMenuItemSelected方法中调用父类(Activity类)的onMenuItemSelected方法的位置来决定先调用onOptionsItemSelected方法还是先调用onMenuItemSelected方法。广州网站建设


  1. //  如果将super.onMenuItemSelected(...)放在Log.d(...)后面调用,  
  2. //  系统会在执行完onMenuItemSelected方法中的代码后再调用onOptionsItemSelected方法  
  3. @Override  
  4. public boolean onMenuItemSelected(int featureId, MenuItem item)  
  5. {  
  6.     super.onMenuItemSelected(featureId, item);// 这条语句调用了onOptionsItemSelected方法  
  7.     Log.d("onMenuItemSelected:itemId=", String. valueOf(item.getItemId()));  
  8.     return true;  
  9. }  
飞机