猿圈()中动态改变菜单项。在Android3.0之前,每次显示菜单的时候,均会调用这个方法。在Android3.0之后,菜单是固定在ActionBar上的,每次显示菜单的时候,不再主动去调用这个方法,必须通过调用invalidateOptionsMenu()来请求调用onPrepareOptionsMenu()。注意,如果整个替换Menu,需要先调用Menu上的clear()方法将原来的菜单项清空。下面是一个例子。@OverridepublicbooleanonPrepareOptionsMenu(Menumenu){menu.clear();if(menu_type==0){this.getMenuInflater().inflate(R.menu.main,menu);}else{this.getMenuInflater().inflate(R.menu.second,menu);}returntrue;}Buttonbtn2=(Button)this.findViewById(R.id.button2);btn2.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){menu_type=1;MainActivity.this.invalidateOptionsMenu();}猿圈});功能演示实战操作publicclassMainActivityextendsActivity{intmenu_type=0;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);猿圈(R.layout.activity_main);Buttonbtn1=(Button)this.findViewById(R.id.button1);Buttonbtn2=(Button)this.findViewById(R.id.button2);btn1.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){menu_type=0;MainActivity.this.invalidateOptionsMenu();}});btn2.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){menu_type=1;MainActivity.this.invalidateOptionsMenu();}});}@OverridepublicbooleanonPrepareOptionsMenu(Menumenu){menu.clear();if(menu_type==0){this.getMenuInflater().inflate(R.menu.main,menu);}else{this.getMenuInflater().inflate(R.menu.second,menu);}returntrue;}}职业素质在一个android创建菜单menu时,需要重写Activity的onCreateOptionsMenu(Menumenu)方法,这个方法只在第一次创建的时候调用一次,所以如果之后想对menu进行动态的修改,那么就不要再对onCreateOptionsMenu做什么手脚了。于是就要用到onPrepareOptionsMenu(Menumenu)方法了。onPrepareOptionsMenu与onCreateOptionsMenu不同的是,他在每次按下menu硬键之前会被调用,所以可以在这猿圈。