我是这个论坛的新手和Android开发本身,所以我的问题可能是一个非常愚蠢的问题,我为此道歉。 我开始在developer.android.com上阅读开发指南,直到带有上下文菜单的部分一切正常。 现在我尝试使用包含一些可检查项目的子菜单的上下文菜单。所以我将子菜单和项目添加到我的menu.xml,并将一些item.setchecked(true)方法添加到我的onContextItemSelected(...)方法。
menu.xml文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/info"
android:title="@string/info" />
<item android:title="@string/change">
<menu>
<item android:id="@+id/checkable_item1"
android:checked="true"
android:checkable="true"
android:title="@string/hello"/>
<item android:id="@+id/checkable_item2"
android:checkable="true"
android:title="@string/moin"/>
<item android:id="@+id/checkable_item3"
android:checkable="true"
android:title="@string/aloha"/>
</menu>
</item>
</menu>
我的.java文件的一部分
...
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater1 = getMenuInflater();
inflater1.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.checkable_item1:
if(item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
case R.id.checkable_item2:
if(item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
case R.id.checkable_item3:
if(item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
default:
return super.onContextItemSelected(item);
}
}
...
现在的问题是,当我打开菜单并按下其中一个可检查项目时,我可以看到在上下文菜单关闭之前在小方框中弹出绿色勾号,但是当我再次打开菜单时勾选离开了。 现在我真的不知道为什么蜱不会留在盒子里。 如果有人可以给我提示并告诉我我做错了什么会很好。 感谢你的期待
让claude91
答案 0 :(得分:0)
我自己没试过,但如果我在这里正确阅读了这些说明(http://developer.android.com/reference/android/app/Activity.html#onCreateContextMenu(android.view.ContextMenu,android.view) .View,android.view.ContextMenu.ContextMenuInfo)), 每次创建菜单时都会调用您的布局资源。由于“在方法返回后保持菜单不安全”,您需要处理所选项目并在某处保留该选择,然后使用menuInfo将可选项目的当前状态传递到onCreate,设置选中/取消选中使用该信息。
如果不这样做,则每次都会根据您的默认设置(menu.xml)重新创建菜单。