我已经阅读了android开发者页面上的说明,以获取Checkable菜单项:
http://developer.android.com/guide/topics/ui/menus.html
这是我的xmlmenu:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="all">
<item android:id="@+id/regu"
android:title="@string/Regulatory" />
<item android:id="@+id/warn"
android:title="@string/Warning" />
<item android:id="@+id/temp"
android:title="@string/Temporary" />
<item android:id="@+id/bicy"
android:title="@string/Bicycle" />
</group>
</menu>
这是我的代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.regu:
if (item.isChecked())
{
item.setChecked(false);
currAvailableOptions++;
}
else if(0 != currAvailableOptions)
{
item.setChecked(true);
currAvailableOptions--;
}
return true;
case R.id.warn:
if (item.isChecked())
{
item.setChecked(false);
currAvailableOptions++;
}
else if(0 != currAvailableOptions)
{
item.setChecked(true);
currAvailableOptions--;
}
return true;
case R.id.temp:
if (item.isChecked())
{
item.setChecked(false);
currAvailableOptions++;
}
else if(0 != currAvailableOptions)
{
item.setChecked(true);
currAvailableOptions--;
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.app_menu, menu);
return true;
}
问题是当我点击一个项目时,菜单项消失了。为了检查其他菜单项,它不必保持可见状态?
有什么想法吗?
问候
答案 0 :(得分:3)
可检查项目仅出现在子菜单或上下文菜单中。
对于子菜单,他们(谷歌)意味着:
子菜单用户显示的菜单项的浮动列表 触摸包含嵌套菜单的菜单项。
由于您的菜单项不是子菜单项,因此无效
答案 1 :(得分:2)
我知道这不是您问题的直接答案,但请考虑以下代码而不是您的开关,它可能会帮助您找到问题。
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.regu:
case R.id.warn:
case R.id.temp:
if (item.isChecked())
currAvailableOptions++;
else if(currAvailableOptions != 0)
currAvailableOptions--;
item.setChecked(!item.isChecked());
return true;
default:
return super.onOptionsItemSelected(item);
}
}
答案 2 :(得分:0)
什么是currAvailableOptions?我查看了你链接的文章,那里没有任何相关信息。您似乎需要做的就是检查:
if (item.isChecked())
item.setChecked(false);
else
item.setChecked(true);
或者至少是教程所说的。也许你应该再读一次?希望这会有所帮助。
答案 3 :(得分:-1)
您应该在每个案例后添加 break; 语句:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item1:
item.setChecked(!item.isChecked());
break;
case R.id.item2:
item.setChecked(!item.isChecked());
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}