2011-08-19 10 views
4

(Newbe)が間違っID

を返すonOptionsItemSelected。メニューのタイトルが凝縮されているかどうかを確認すると正しいです。

int id = item.getItemId(); //returns id of an incorrect menu 
String Title = (String) item.getTitleCondensed(); //this returns the correct title. 

アイデアを歓迎します。

+0

*最初のメニュー*は何ですか?これはサブメニューですか? – Phil

答えて

1

onCreateOptionsMenuとonCreateContextMenuには、それぞれのメニュー項目に固有のIDを設定する必要があります。例えば

public static final int CONTEXT_MENU_DELETE = Menu.FIRST; 
    public static final int CONTEXT_MENU_EDIT = CONTEXT_MENU_DELETE + 1; 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
        ContextMenuInfo menuInfo) { 

      menu.add(0, CONTEXT_MENU_DELETE, 1, R.string.delete); 
      menu.add(0, CONTEXT_MENU_EDIT, 2, R.string.edit); 
    } 

    // And then 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

      switch(item.getItemId()) { 

      case CONTEXT_MENU_DELETE: 
        // Delete item 
        break; 

      case CONTEXT_MENU_EDIT: 
        // Edit item 
        break; 
      } 
    } 

同じことがonCreateOptionsMenuとonOptionsItemSelectedするためのものです。メニューオプションごとに固有の定数が必要です。

を追加しました:

はあなたがthis tutorialをチェックアウトしませんでしたか? アイデアは同じです。あなたはmenu.xmlに異なるIDを設定する必要があります。その後、

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:id="@+id/new_game" 
       android:icon="@drawable/ic_new_game" 
       android:title="@string/new_game" /> 
     <item android:id="@+id/help" 
       android:icon="@drawable/ic_help" 
       android:title="@string/help" /> 
    </menu> 

そしてonOptionsItemSelectedにこれらのIDを使用します。

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

公式Androidのメニューのチュートリアルからこれらのコードブロックをチェックアウトし、独自のコードと比較します。 menu.xmlonCreateOptionsMenuonOptionsItemSelectedを公開して、問題を簡単に把握することもできます。

+0

こんにちは、お返事ありがとうございます。私は、私のメニューはmenu.xmlファイルからのものだと言わねばならないので、私はIDを割り当てず、システムは3124655などのように生成されます。そして、それは間違っているシステムIDが返されます。 – Olan

+0

私は答えにリソースの一部を追加しました。また、 'menu.xml'、' onCreateOptionsMenu'、 'onOptionsItemSelected'を公開することで、問題を簡単に把握することができます。 – Victor

+0

こんにちは、チュートリアルは私が始めた場所です。私のメニューは次のようになっています: – Olan

7

私は同じ問題を抱えていました。ビルドから生成されたファイルは正しく更新されません。

xmlのメニュー項目を並べ替えると同じ効果が得られます。ビルドと驚き。メニューをクリックすると、予想外のコードが表示されます。

クリーンで再試行してください。

+1

これはちょうど私に起こりました - クリーニングが私を助けました...奇妙な - しかし感謝;-) – Thomas

+0

私はプロジェクトをきれいにし、それは働いた。ありがとう。 –