2013-03-15 73 views
0

我有一個子菜單菜單。父項是「選項」,其子項是「呼叫」,「導航」和「編輯」。這是我處理菜單點擊的活動代碼。問題是第一個子菜單總是被事件選中。有了這段代碼,如果我點擊「Call」(第一個子項),onOptionsItemSelected()方法將註冊選中的R.id.record_edit項。我不知道爲什麼會發生這種情況,因爲「調用」菜單項的ID爲「record_call」。我試過在xml中切換子菜單項,但是第一個子菜單項是唯一註冊的子菜單項,並且它始終註冊爲R.id.record_edit。不知道我的代碼有什麼問題。android - 子菜單點擊不選擇正確的項目

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    switch (item.getItemId()) { 
    case R.id.record_edit: 

     Intent intent = new Intent(this, EditRecordActivity.class); 
     myApp.setRecord(record); 
     Bundle b = new Bundle(); 
     b.putBoolean("new", false); 
     b.putString("pageTitle", pageTitle); 
     b.putString("meta_universalid", meta_universalid); 
     intent.putExtras(b); 
     startActivity(intent); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

XML菜單

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/record_options" 
     android:showAsAction="ifRoom|withText" 
     android:title="..." 
     android:titleCondensed="Options" 
     android:enabled="true"> 
     <menu> 

      <item 
       android:id="@+id/record_call" 
       android:showAsAction="ifRoom|withText" 
       android:title="@string/record_call"/> 
      <item 
       android:id="@+id/record_navigate" 
       android:showAsAction="ifRoom|withText" 
       android:title="@string/record_navigate"/> 

      <item 
       android:id="@+id/record_edit" 
       android:showAsAction="ifRoom|withText" 
       android:title="@string/record_edit"/>   
     </menu> 
    </item> 
</menu> 

回答

0

與你的菜單只是檢查,以確保萬無一失。它對我來說工作得很好。檢查你的整體格式是否如下面的代碼

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.record_call: 
     Toast.makeText(this, "call", 1000).show(); 
     return true; 
    case R.id.record_edit: 
     Toast.makeText(this, "edit", 1000).show(); 

     return true; 
    case R.id.record_navigate: 
     Toast.makeText(this, "navigate", 1000).show(); 

     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
+0

嗯。我剛創建了一個空白的應用程序項目,並做到了這一點,並像它應該那樣工作。我無法分辨我的主要應用程序代碼有什麼不同。 – David 2013-03-15 18:41:34

+0

你最好粘貼你的整個oncreateoptionmenu和onoptionmenuitemseleced ..可能是可以揭示問題 – stinepike 2013-03-16 03:25:56