android:从子菜单中删除一个项目

时间:2013-09-20 05:41:26

标签: android menu android-actionbar submenu

我在菜单中创建了项目列表。所有这些项目都将显示在操作栏中。然后每个项目将再次有一个项目子菜单。

Bellow是我的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sceneMenu" >

<item
    android:id="@+id/whiteBalanceList"
    android:icon="@drawable/white_balance_list"
    android:showAsAction="always"
    android:title="@string/selWhiteBalance">
    <menu>
        <item
            android:id="@+id/whiteBalanceAuto"
            android:title="Auto" />
        <item
            android:id="@+id/whiteBalanceCloudy"
            android:title="Cloudy Daylight" />
        <item
            android:id="@+id/whiteBalanceDaylight"
            android:title="Daylight" />
        <item
            android:id="@+id/whiteBalanceFluorescent"
            android:title="Fluorescent" />
        <item
            android:id="@+id/whiteBalanceIncandescent"
            android:title="Incandescent" />
        <item
            android:id="@+id/whiteBalanceShade"
            android:title="Shade" />
        <item
            android:id="@+id/whiteBalanceTwilight"
            android:title="Twilight" />
        <item
            android:id="@+id/whiteBalanceWarm"
            android:title="Warm Fluorescent" />  
    </menu>
</item>
<item
    android:id="@+id/flashList"
    android:icon="@drawable/flash_list"
    android:showAsAction="always"
    android:title="@string/selFlash">
    <menu>
        <item
            android:id="@+id/flashAuto"
            android:title="Auto"/>
        <item
            android:id="@+id/flashOn"
            android:title="On"/>
        <item
            android:id="@+id/flashOff"
            android:title="Off"/>
    </menu>
</item>  
</menu>

当我尝试删除子菜单项时(例如我想删除“白平衡列表”子菜单下的“自动”项目),使用以下代码:

menu.getItem(R.id.whiteBalanceList).getSubMenu().removeItem(R.id.whiteBalanceAuto);

我收到索引outOfBoundException的错误,因为R.id.whiteBalanceList实际上会产生随机唯一编号,但menu.size()只有2 ...

但如果我做一个removeItem,即<。p>

menu.removeItem(R.id.whiteBalanceList);

它完美运行......

任何想法为什么?

3 个答案:

答案 0 :(得分:3)

我猜你必须使用&#39; findItem&#39;而不是&#39; getItem&#39;喜欢

menu.findItem(R.id.whiteBalanceList).getSubMenu().removeItem(R.id.whiteBalanceAuto);

我也会对NULL进行更多检查,以防万一:)

答案 1 :(得分:2)

我最终解决了这个问题。 以下是我的代码:

MenuItem whiteMenu = null;
for (int i = 0; i < menu.size(); i++) {
    if (menu.getItem(i).getItemId() == R.id.whiteBalanceList) {
        whiteMenu = menu.getItem(i);
        break;
    }
}
if (whiteMenu != null)
    checkWhiteBalance(whiteList, whiteMenu.getSubMenu());

private void checkWhiteBalance(List<String> list, Menu menu) {
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_AUTO))
        menu.removeItem(R.id.whiteBalanceAuto);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT))
        menu.removeItem(R.id.whiteBalanceCloudy);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_DAYLIGHT))
        menu.removeItem(R.id.whiteBalanceDaylight);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_FLUORESCENT))
        menu.removeItem(R.id.whiteBalanceFluorescent);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_INCANDESCENT))
        menu.removeItem(R.id.whiteBalanceIncandescent);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_SHADE))
        menu.removeItem(R.id.whiteBalanceShade);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_TWILIGHT))
        menu.removeItem(R.id.whiteBalanceTwilight);
    if (!list.contains(Camera.Parameters.WHITE_BALANCE_WARM_FLUORESCENT))
        menu.removeItem(R.id.whiteBalanceWarm);
}

答案 2 :(得分:0)

也许是因为你的subMenus没有任何ID,所以你的项目R.java可以指出它们。尝试使用givinh ID到子菜单,然后再试一次。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sceneMenu" >

<item
android:id="@+id/whiteBalanceList"
android:icon="@drawable/white_balance_list"
android:showAsAction="always"
android:title="@string/selWhiteBalance">
<menu 
    android:id="@+id/whiteSubMenu">
    <item
        android:id="@+id/whiteBalanceAuto"
        android:title="Auto" />
    <item
        android:id="@+id/whiteBalanceCloudy"
        android:title="Cloudy Daylight" />
    <item
        android:id="@+id/whiteBalanceDaylight"
        android:title="Daylight" />
    <item
        android:id="@+id/whiteBalanceFluorescent"
        android:title="Fluorescent" />
    <item
        android:id="@+id/whiteBalanceIncandescent"
        android:title="Incandescent" />
    <item
        android:id="@+id/whiteBalanceShade"
        android:title="Shade" />
    <item
        android:id="@+id/whiteBalanceTwilight"
        android:title="Twilight" />
    <item
        android:id="@+id/whiteBalanceWarm"
        android:title="Warm Fluorescent" />  
</menu>
</item>
<item
android:id="@+id/flashList"
android:icon="@drawable/flash_list"
android:showAsAction="always"
android:title="@string/selFlash">
<menu
    android:id="@+id/flashSubMenu">
    <item
        android:id="@+id/flashAuto"
        android:title="Auto"/>
    <item
        android:id="@+id/flashOn"
        android:title="On"/>
    <item
        android:id="@+id/flashOff"
        android:title="Off"/>
</menu>
</item>  
</menu>

另外,可能是因为在菜单膨胀前使用调用删除方法? 你能给你的java代码吗?