在选项菜单中设置itemId

12

我有一个通过XML资源定义的菜单。现在动态地我添加了一个菜单项。

public boolean onCreateOptionsMenu(Menu menu) 
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu, menu);

    if(myCondition==true)
    {
        menu.add(0, 99, 0, "new Entry");

    }

    return true;
}

在onOptionsItemSelected(MenuItem item)方法中,我有一个case语句用于检查"99"并执行我的操作。从技术上讲,这样做是没问题的,我只是想知道我应该选择什么数字,这里选择99?在XML中创建的项目通过资源文件获得了一个ID,我猜Android有一些逻辑来创建这些项目。我想知道是否可能会出现一个生成的菜单项也得到了99,然后它将不再起作用。哪种方式最好呢?


你可以查看这个问题的答案:https://dev59.com/oXI-5IYBdhLWcg3wta1q - Ramseys
那篇帖子中的第一个回答说它可能会重复,但我不理解的是如果ID重复了,如何评估onOptionsItemSelected?第二个响应指向的示例似乎不适合。也许示例代码已经改变了。 - AndyAndroid
ID 重复的可能性非常小... 不过,如果您绝对想要处理这种情况,您可以使用 setOnMenuItemClickListener(menuItemClickListener) 定义一个不同的 menuItemClickListener - Ramseys
2个回答

5

3
如果我使用这个重载(或者什么都不用),你如何评估onOptionsItemSelected方法?你需要在那里检查ID,否则你就不知道哪个菜单被按下了? - AndyAndroid
1
通常我会以函数式的方式为每个菜单项添加不同的监听器,但这只是个人偏好。add方法返回一个对其创建的项目的引用。你可以与之进行比较。 - Kevin Coulombe

0
我的解决方案有些愚蠢,是创建了一个包含所有所需按钮ID的XML资源布局菜单,然后我可以使用它们自己独特的ID在代码中引用它们,即使我根本没有使用该资源 - 实际上只是一个随机生成ID的注册表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接