android - 唯一标识 ActionBar 选项菜单项

标签 android android-actionbar

我正在将我最初编写的应用程序转换为目标 v2.2,以便它使用 v4 兼容性库和 ActionBarSherlock 以 v4 为目标。

我正在研究 ActionBar 选项菜单和子菜单,并尝试弄清楚如何以独特的方式识别子菜单项。

例子...

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    SubMenu mediaSubMenu = menu.addSubMenu("Media");
    mediaSubMenu.add("Videos");
    mediaSubMenu.add("Music");

}

这很好,我得到了“媒体”的 ActionBar 菜单项,当我单击时,我看到了“视频”和“音乐”子菜单项。我的问题是我确定被单击的子菜单项的唯一方法如下...

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    super.onOptionsItemSelected(item);

    if (item.getTitle().equals("Music")) {
        // Do something
        return true;
    }
    return false;
}

我突然想到我可能有另一个同名的子菜单项,例如“设置”->“音乐”。

如何区分这两者?我忍不住觉得我在这里遗漏了一些非常简单的东西。

最佳答案

为您的菜单项设置 id

mediaSubMenu.add(Menu.NONE, R.id.media_videos, Menu.NONE, "Videos")

你可以在资源文件中定义id(比如res/values/ids.xml)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="media_videos" type="id"/>
    <item name="other_videos" type="id"/>
</resources>

然后你可以使用

switch(item.getItemId()) {
    case R.id.media_videos:
        ...
    case R.id.other_videos:
        ...
}

我还建议使用菜单 xml 来设置操作栏数据。

关于android - 唯一标识 ActionBar 选项菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318064/

相关文章:

android - ActionBarSherlock 旧标题栏在旧版 Android 上仍然可见

android - 设备旋转后重新排序的 DialogFragments

android - react 原生 firebase 与 expo 裸应用程序的集成

java - 返回上一个 Activity

android - 如何将 ActionBar 添加到已经扩展了 ListActivity 的 Activity 中?

android - 我可以在图形布局编辑器中预览操作栏吗?

java - 单击按钮更改 ImageView 的颜色?

android - Cordova 文件插件 : SECURITY_ERR

java - 更改向上箭头颜色后标记为私有(private)警告

带有 actionLayout 的 Android 操作栏菜单项无法正常工作