好的,在 menu.add 中,您添加一个整数菜单项 id。
但是在xml中指定菜单时,@+id不能取整数,所以不能在switch语句中将菜单项的id作为整数进行测试。
我错过了什么明显的事情,因为这个愚蠢的人肯定无法通过谷歌所有那些出色的天才的不一致。
最重要的是,当我给菜单项命名为“@+id/myMenuItem”时,item.getItemId() 返回一个整数,一个长整数,我猜它是十六进制指针的表示。
米
您不能将 XML 中的 id 属性指定为整数,因为所有 id 都(在构建过程中)生成为整数,然后放入 R.java 以供以后访问。如果他们让您将其命名为整数,那么您将不会创建合法的 Java 代码(因为 Java 变量不能只是一个数字)。
换句话说,如果您将 id 命名为“@+id/something”,那么在 R.java 中有一个静态变量“something”,其中包含该 id 的整数 id。然后在代码中,当用户单击菜单项时,您可以这样访问它:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.something: {
// Do something here
return true;
}
return super.onOptionsItemSelected(item);
}
@id
values 必须映射到 Java 名称(@id/foo
变成R.id.foo
),并且您不能拥有纯数字的 Java 名称。我什至不确定它是否可以以数字开头。
看看这个例子:
private static final int EDIT_ID = Menu.FIRST + 3;
private static final int DELETE_ID = Menu.FIRST + 4;
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenu.ContextMenuInfo menuInfo) {
menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut(
'e');
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete")
.setAlphabeticShortcut('d');
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
.getMenuInfo();
switch (item.getItemId()) {
case EDIT_ID:
edit(info.id);
return (true);
case DELETE_ID:
delete(info.id);
return (true);
}
return (super.onOptionsItemSelected(item));
}