深度嵌套的菜单项不会在点击时触发 - Android

时间:2014-01-31 20:58:35

标签: android menuitem

值得注意的是,我的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);
        }
    }

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>