3

我正在将我最初编写的应用程序转换为目标 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;
}

尽管我可能有另一个具有相同名称的子菜单项,例如“设置”->“音乐”。

我如何区分两者?我不禁觉得我在这里错过了一些非常简单的东西。

4

1 回答 1

3

为您的 MenuItems 设置 id

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

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

<?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 来设置您的操作栏数据。

于 2013-03-10T01:57:48.207 回答