值得注意的是,我的R.java文件今天早上消失了,因为我在此菜单XML文件中使用了错误的菜单图标名称。我已经更正了名称并重新生成了R.java文件。
我通过调试发现了什么:
任何需要4次点击才能触及的菜单项不会触发Android中的onOptionsItemSelected侦听器。
我可以让这些4次单击的menuItem触发onOptionsItemSelected侦听器吗?感谢。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_sticker"
android:showAsAction="always"
android:icon="@drawable/ic_action_add"
android:title="Add Sticker">
<menu>
<item
android:id="@+id/menu_male"
android:showAsAction="always"
android:title="Male">
<menu>
<item
android:id="@+id/menu_add_clothes"
android:showAsAction="always"
android:title="Add Clothes">
<menu>
<item
android:id="@+id/menu_maleHat"
android:showAsAction="always"
android:title="Hat"/>
<item
android:id="@+id/menu_maleTop"
android:showAsAction="always"
android:title="Top"/>
<item
android:id="@+id/menu_malePants"
android:showAsAction="always"
android:title="Pants"/>
</menu>
</item>
<item
android:id="@+id/menuMaleAccessories"
android:showAsAction="always"
android:title="Add Accessories">
</item>
<item
android:id="@+id/menuMaleHair"
android:showAsAction="always"
android:title="Add Hair">
</item>
</menu>
</item>
<item
android:id="@+id/menu_female"
android:showAsAction="always"
android:title="Female">
<menu>
<item
android:id="@+id/menu_add_clothes_female"
android:showAsAction="always"
android:title="Add Clothes">
<menu>
<item
android:id="@+id/menu_femaleHat"
android:showAsAction="always"
android:title="Hat"/>
<item
android:id="@+id/menu_femaleTop"
android:showAsAction="always"
android:title="Top"/>
<item
android:id="@+id/menu_femalePants"
android:showAsAction="always"
android:title="Pants"/>
</menu>
</item>
<item
android:id="@+id/menuFemaleAccessories"
android:showAsAction="always"
android:title="Add Accessories">
</item>
<item
android:id="@+id/menuFemaleHair"
android:showAsAction="always"
android:title="Add Hair">
</item>
</menu>
</item>
</menu>
</item>
<item
android:id="@+id/action_settings"
android:showAsAction="always"
android:title="Sticker Settings"
android:icon="@drawable/ic_action_gear">
<menu>
<item
android:id="@+id/action_save"
android:showAsAction="always"
android:title="@string/action_save"
android:icon="@drawable/ic_action_save">
</item>
<item
android:id="@+id/action_cancel"
android:showAsAction="always"
android:title="Cancel"
android:icon="@drawable/ic_action_cancel">
</item>
<item
android:title="Sticker Settings"
android:id="@+id/action_cancel1"
android:icon="@drawable/ic_action_settings">
<menu>
<group android:checkableBehavior="single"
>
<item android:id="@+id/uniformScale"
android:title="Change Size"
android:checked="true" />
<item android:id="@+id/rotation"
android:title="Rotate"
android:checked="false" />
</group>
</menu>
</item>
</menu>
</item>
</menu>
的活动:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.dressing_room, menu);
checkCheckboxes(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case R.id.menu_femaleHat : addClothes(R.id.menu_femaleHat);
Log.d("adding hat", "hat clicked");
break;
case R.id.menu_femalePants: addClothes(R.id.menu_femalePants);
break;
case R.id.menu_femaleTop: addClothes(R.id.menu_femaleTop);
break;
case R.id.menu_maleHat: addClothes(R.id.menu_maleHat);
break;
case R.id.menu_malePants: addClothes(R.id.menu_malePants);
break;
case R.id.menu_maleTop: addClothes(R.id.menu_maleTop);
break;
case R.id.menuMaleHair: addClothes(R.id.menuMaleHair);
break;
case R.id.menuFemaleHair: addClothes(R.id.menuFemaleHair);
break;
case R.id.menuMaleAccessories: addClothes(R.id.menuMaleAccessories);
break;
case R.id.menuFemaleAccessories: addClothes(R.id.menuFemaleAccessories);
break;
case R.id.action_save: saveClicked();// cropImage();
break;
case R.id.action_cancel: goToStartScreen();// cropImage();
break;
case R.id.uniformScale:
changeAnisotropic(item);
break;
case R.id.rotation:
changeRotate(item);
break;
}
return super.onOptionsItemSelected(item);
}
private void changeRotate(MenuItem item){
if (item.isChecked()) {
item.setChecked(false);
photoSorter.setRotate(2);
photoSorter.setAnisotropic(1);
}
else{
item.setChecked(true);
photoSorter.setRotate(1);
photoSorter.setAnisotropic(2);
}
}
private void checkCheckboxes(Menu menu){
MenuItem checkBox1 = (MenuItem) menu.findItem(R.id.uniformScale);
if (checkBox1.isChecked()) {
photoSorter.setRotate(2);
photoSorter.setAnisotropic(1);
}
else{
photoSorter.setRotate(1);
photoSorter.setAnisotropic(2);
}
}
private void changeAnisotropic(MenuItem item){
if (item.isChecked()) {
item.setChecked(false);
photoSorter.setAnisotropic(2);
photoSorter.setRotate(1);
}
else{
item.setChecked(true);
photoSorter.setAnisotropic(1);
photoSorter.setRotate(2);
}
}
答案 0 :(得分:1)
将<items>
的第二级<menu>
嵌入<group>
,例如:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu1"/>
<item android:id="@+id/menu2">
<menu>
<group android:id="@+id/group2">
<item android:id="@+id/submenu1" />
<item android:id="@+id/submenu2" />
</group>
</menu>
</item>
</menu>
答案 1 :(得分:1)
来自Android documentation on menus:
You can add a submenu to an item in any menu (except a submenu) by adding a <menu> element as the child of an <item>