Возможно, стоит отметить, что мой файл R.java исчез сегодня утром, потому что я использовал неправильное имя значка меню в этом XML-файле меню. С тех пор я исправил имя и восстановил файл R.java.
Что я выяснил путем отладки:
Любой элемент меню, для перехода к которому требуется 4 клика, не запускает прослушиватель onOptionsItemSelected в Android.
Могу ли я заставить эти элементы меню с 4 щелчками запускать прослушиватель 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);
}
}