Android: действие элемента onCreateOptionsMenu () - PullRequest
23 голосов
/ 13 июля 2011

У меня есть меню, созданное с помощью:

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

    return super.onCreateOptionsMenu(menu);
  }

Но я не могу вспомнить, как настроить onclicklistener, поэтому при его выборе я могу запустить свою функцию электронной почты.

Ответы [ 4 ]

39 голосов
/ 13 июля 2011

Переопределить onOptionsItemSelected(MenuItem item).Так что это будет похоже на

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

РЕДАКТИРОВАТЬ:

Так как это набрало так много очков, я должен отметить, что это очень хорошо, чтобы добавить идентификаторы в менюопции.Хороший способ убедиться, что они всегда уникальны, - определить их в ресурсе 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>

Тогда, когда выПереопределив метод onCreateOptionsMenu(Menu menu), вы можете использовать идентификаторы следующим образом:

@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;
}

Переопределить 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);
    }
}

Причина, по которой вы это делаете, заключается в том, что Activity переопределяет это с помощью пунктов меню, но Fragments также может добавлять свои собственные пункты меню.Использование ids.xml обеспечивает уникальность идентификаторов независимо от того, в каком порядке они размещены.

18 голосов
/ 22 ноября 2012

Это не сработает.Вы должны определить идентификаторы для ваших пунктов меню:

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);
        }
    }
9 голосов
/ 13 июля 2011

С Руководство разработчика 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);
}
}
6 голосов
/ 13 июля 2011
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case R.id.itemid:
            //do cool stuff
            break;
          }
     }
...