Android:onCreateOptionsMenu()项目操作

Nic*_*ick 23 android menu options-menu

我有一个菜单创建通过:

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    menu.add("Email");

    return super.onCreateOptionsMenu(menu);
  }
Run Code Online (Sandbox Code Playgroud)

但我不记得如何设置一个onclicklistener所以当它选择我可以运行我的电子邮件功能.

Dee*_*eeV 40

覆盖onOptionsItemSelected(MenuItem item).所以它会是这样的

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case 0:
            // do whatever
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

由于这已经得到了很多分,我应该注意到将ID添加到菜单选项中非常好的.确保它们始终唯一的一种好方法是在ids.xml放在res/values文件夹中的资源中定义它们.

ids.xml

<resources>
    <item name="menu_action1" type="id"/>
    <item name="menu_action2" type="id"/>
    <item name="menu_action3" type="id"/>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后,当您覆盖该onCreateOptionsMenu(Menu menu)方法时,您可以像这样使用ID:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);

  menu.add(Menu.NONE, R.id.menu_action1, Menu.NONE, R.string.menu_action1);
  menu.add(Menu.NONE, R.id.menu_action2, Menu.NONE, R.string.menu_action1);

  return true;
}
Run Code Online (Sandbox Code Playgroud)

覆盖onOptionsItemSelected(MenuItem item).

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_action1:
            // do whatever
            return true;
        case R.id.menu_action2:
            // do whatever
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

你这样做的原因是Activity用菜单选项覆盖它,但Fragments也可以添加自己的菜单项.使用ids.xml确保ID是唯一的,无论它们放置在哪个顺序.

  • 作为一个很好的编程实践,我会使用id而不是硬编码案例中的数字. (5认同)

Dan*_*dan 18

那不行.您应该为菜单项定义ID:

public static final int MENU_ADD = Menu.FIRST;
public static final int MENU_DELETE = Menu.FIRST + 1;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "Add");
    menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete");
    return true;
}

   @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch(item.getItemId())
        {
            case MENU_ADD:

            return true;
        case MENU_DELETE:

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Oce*_*lue 9

来自Android开发者指南

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.new_game:
    newGame();
    return true;
case R.id.help:
    showHelp();
    return true;
default:
    return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)


JLB*_*JLB 6

    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case R.id.itemid:
            //do cool stuff
            break;
          }
     }
Run Code Online (Sandbox Code Playgroud)