2011-07-13 7 views
22

私が通じ作成したメニューがあります。アンドロイド:onCreateOptionsMenu()項目のアクション

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

    return super.onCreateOptionsMenu(menu); 
    } 

をしかし、私はその私は私の電子メール機能を実行することができ、選択したときにonclicklistenerように設定する方法を覚えていないことができます。

答えて

36

オーバーライドonOptionsItemSelected(MenuItem item)。だから、

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

EDITのように次のようになります。これは非常に多くのポイントを得ているので

、私はそれは、メニューオプションにIDを追加する非常に良好であることに注意してください。それらが常に一意であることを確認する良い方法は、res/valuesフォルダに置かれたids.xmlリソースでそれらを定義することです。

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)メソッドをオーバーライドするときに、あなたはそうのような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; 
} 

オーバーライド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を使用すると、どの順序で配置されていてもIDが一意であることが保証されます。 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); 
} 
} 
+5

良いプログラミング方法として、私は大文字小文字の数字をハードコードするのではなく、IDを使用します。 –

8

。メニューアイテムの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); 
     } 
    } 
6
public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
     case R.id.itemid: 
      //do cool stuff 
      break; 
      } 
    } 
+0

笑...男私は遅いです。 – JLB

+0

アラバマ・アイコン@JLB = Pの投票 – Dave

18

から

関連する問題