web-dev-qa-db-fra.com

Android: action d'élément onCreateOptionsMenu ()

J'ai un menu créé à travers:

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

    return super.onCreateOptionsMenu(menu);
  }

Mais je ne me souviens pas comment définir un onclicklistener donc quand il est sélectionné, je peux exécuter ma fonction de messagerie.

23
Nick

Remplacez onOptionsItemSelected(MenuItem item). Ce serait donc comme

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

ÉDITER:

Étant donné que cela a obtenu tant de points, je dois noter qu'il est très bon d'ajouter des ID aux options de menu. Un bon moyen de vous assurer qu'ils sont toujours uniques est de les définir dans une ressource ids.xml Qui est placée dans le dossier res/values.

ids.xml

<resources>
    <item name="menu_action1" type="id"/>
    <item name="menu_action2" type="id"/>
    <item name="menu_action3" type="id"/>
</resources>

Ensuite, lorsque vous remplacez la méthode onCreateOptionsMenu(Menu menu), vous pouvez utiliser les ID comme suit:

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

Remplacez 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);
    }
}

La raison pour laquelle vous le faites est que Activity remplacerait cela par les options de menu, mais Fragments peut également ajouter leurs propres éléments de menu. L'utilisation du ids.xml Garantit que les identifiants sont uniques, quelle que soit leur commande.

39
DeeV

Ça ne marchera pas. Vous devez définir des ID pour vos éléments de menu:

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);
        }
    }
18
Daniel Bogdan

De Guide du développeur 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);
}
}
9
OceanBlue
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case R.id.itemid:
            //do cool stuff
            break;
          }
     }
6
JLB