android:从子菜单中删除项目
我在菜单中创建了项目列表。所有这些项目都将显示在操作栏中。然后每个项目都会有一个子菜单的项目 下面是我的xml代码:android:从子菜单中删除项目,android,menu,android-actionbar,submenu,Android,Menu,Android Actionbar,Submenu,我在菜单中创建了项目列表。所有这些项目都将显示在操作栏中。然后每个项目都会有一个子菜单的项目 下面是我的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/whiteBalanceLi
<?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>
我得到一个索引outOfBoundException错误,因为R.id.whiteBalanceList实际上会导致随机唯一数,但menu.size()仅为2
但是如果我做一个removietem,例如
menu.removeItem(R.id.whiteBalanceList);
它运行得很好
知道为什么吗?可能是因为您的子菜单没有任何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代码吗?可能是因为您的子菜单没有任何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代码吗?我做了一些变通,最终解决了这个问题。 下面是我的代码:
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);
}
MenuItem-whiteMenu=null;
对于(int i=0;i
我做了一些变通,最终解决了这个问题。
下面是我的代码:
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);
}
MenuItem-whiteMenu=null;
对于(int i=0;i
我猜您必须使用“findItem”而不是像这样的“getItem”
menu.findItem(R.id.whiteBalanceList).getSubMenu().removeItem(R.id.whiteBalanceAuto);
我也会对NULL进行更多的检查,以防万一:)我想您必须使用'findItem'而不是像这样的'getItem'
menu.findItem(R.id.whiteBalanceList).getSubMenu().removeItem(R.id.whiteBalanceAuto);
我也会对NULL进行更多检查,以防万一:)Hmmmm我不这么认为。。。因为错误是由menu.getItem(R.id.whiteBalanceList)引发的,这意味着我试图从一级菜单获取该项。。但如果你的建议有效,我会试试的!我将在星期一试一试!谢谢你的建议。将再次让您知道:)我已尝试将id添加到子菜单,但仍然不起作用。但我的应用程序已经运行正常了。我将很快公布答案。谢谢你的帮助,伙计!嗯,我不这么认为。。。因为错误是由menu.getItem(R.id.whiteBalanceList)引发的,这意味着我试图从一级菜单获取该项。。但如果你的建议有效,我会试试的!我将在星期一试一试!谢谢你的建议。将再次让您知道:)我已尝试将id添加到子菜单,但仍然不起作用。但我的应用程序已经运行正常了。我将很快公布答案。谢谢你的帮助,伙计!