2011-07-13 16 views
22

Mam menu stworzone przez:Android: onCreateOptionsMenu() działanie poz

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

    return super.onCreateOptionsMenu(menu); 
    } 

Ale nie mogę sobie przypomnieć, jak się ustawić onclicklistener więc gdy jej wybrany mogę uruchomić moją funkcję e-mail.

Odpowiedz

36

Zastąpienie onOptionsItemSelected(MenuItem item). Więc to będzie jak

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

EDIT:

Od tego ma zdobyć tak wiele punktów, powinien pamiętać, że jest bardzo dobry, aby dodać identyfikatory do opcji menu. Dobrym sposobem zapewnienia, że ​​są one zawsze unikatowe, jest zdefiniowanie ich w zasobach ids.xml umieszczonych w folderze res/values.

ids.xml

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

Wtedy, kiedy zastąpić metodę onCreateOptionsMenu(Menu menu), można użyć identyfikatory tak:

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

Zastąp 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); 
    } 
} 

Powodem zrobić to Activity by zastąpić ten z opcji menu, ale Fragments mogą również dodawać własne elementy menu. Korzystanie z ids.xml zapewnia, że ​​identyfikatory są niepowtarzalne, bez względu na to, w jakiej kolejności się znajdują.

+5

Jako dobrą praktykę programistyczną użyłbym identyfikatorów zamiast numerowania na sztywno liczb w tej sprawie. –

8

Od Android developer guide

@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
public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
     case R.id.itemid: 
      //do cool stuff 
      break; 
      } 
    } 
+0

lol ... człowiek jestem powolny. – JLB

+0

głosowanie w dół dla ikony Alabamy @JLB = P – Dave

18

To nie zadziała. Powinieneś zdefiniować ID dla swoich pozycji 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); 
     } 
    } 
Powiązane problemy