0

好的,在 menu.add 中,您添加一个整数菜单项 id。

但是在xml中指定菜单时,@+id不能取整数,所以不能在switch语句中将菜单项的id作为整数进行测试。

我错过了什么明显的事情,因为这个愚蠢的人肯定无法通过谷歌所有那些出色的天才的不一致。

最重要的是,当我给菜单项命名为“@+id/myMenuItem”时,item.getItemId() 返回一个整数,一个长整数,我猜它是十六进制指针的表示。

4

3 回答 3

6

您不能将 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);
}
于 2010-03-16T20:09:03.930 回答
1

@idvalues 必须映射到 Java 名称(@id/foo变成R.id.foo),并且您不能拥有纯数字的 Java 名称。我什至不确定它是否可以以数字开头。

于 2010-03-16T20:05:26.663 回答
0

看看这个例子:

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));
    }
于 2010-03-16T20:41:45.923 回答