Глубоко вложенные элементы меню не срабатывают при нажатии - Android

Возможно, стоит отметить, что мой файл 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);
        }
    }

person user3164083    schedule 31.01.2014    source источник
comment
У вас есть именно этот xml с этими «меню»?   -  person Orhan Obut    schedule 01.02.2014
comment
@ nr4bt Это точно мой XML для файла меню. Если я неправильно понял вопрос, пожалуйста, перефразируйте. Спасибо.   -  person user3164083    schedule 01.02.2014
comment
можете ли вы показать свою активность, где вы используете это меню и как вы добавляете кликлистера..   -  person Ranjit    schedule 01.02.2014
comment
@RanjitPati Это включено в вопрос   -  person user3164083    schedule 01.02.2014


Ответы (2)


Вложите <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>
person Jorgesys    schedule 01.02.2014
comment
У меня та же проблема, что и у оригинального плаката, и, к сожалению, это решение мне не помогло. - person HanClinto; 04.02.2016

Из документации Android по меню:

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>
person HanClinto    schedule 03.02.2016