2010-08-05 137 views
3

我想在一個活動中創建一個選項菜單,從一個服務開始,然後根據來自通過處理程序傳遞的服務的消息更改其UI。Android - 選項菜單不會工作

我設置的選項菜單如下:


 /** Menu creation and setup **/ 

     /* Creates the menu items */ 
     public boolean onCreateOptionsMenu(Menu menu) { 
      menu.add(0, 1, 0, "Speaker"); 
      menu.add(0, 2, 0, "Mute"); 
      return true; 
     } 

     /* Handles item selections */ 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case 1: 
       //Do something here 
       return true; 
      case 2: 
       //Do something here 
       return true; 
      } 
      return false; 
     } 

但是,當我的應用程序運行在所有它永遠不會被調用。

我遇到過問題,我需要使用處理程序來更改屏幕上的文本,因爲信息正在傳遞給錯誤的線程,請問這個問題可能導致菜單不顯示?

是這樣我怎麼能解決這個問題,因爲我不能在處理程序

+1

您的活動已創建,但不是菜單? – Sephy 2010-08-05 10:13:04

+0

是的我的活動顯示正常,但是當我按菜單按鈕什麼也沒有發生 – 2010-08-05 10:19:56

回答

5

確保你是不是消費關鍵處理程序中菜單的關鍵事件。在由onCreateOptionsMenu函數處理之前,菜單按鈕事件通過密鑰處理程序發送。這可能發生在任何關注焦點的視角或活動本身。快速解決這個問題的方法如下:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_MENU) 
     return super.onKeyDown(keyCode, event); 
    -- insert all other key handling code here -- 
    return false; 
} 
+0

乾杯!由於我的兩項活動沒有顯示「全局菜單」,因此我整晚都拔掉頭髮,即使它們是從同一個「全局菜單基類」繼承而來的。結果發現問題正是你指出的:一些在我的activites中自動創建的onKeyDown方法已經接管了。非常感謝! – Spock 2011-12-17 21:52:31

2

嘗試調用父類方法在你重寫onCreateOptionsMenu方法如下覆蓋方法:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    boolean result = super.onCreateOptionsMenu(menu); 
    menu.add(0, 1, 0, "Speaker"); 
    menu.add(0, 2, 0, "Mute"); 

    return result; 
}