2010-08-05 2 views
3

Я пытаюсь создать меню «Параметры» в Управлении, которое запускается из Сервиса, а затем изменяет его интерфейс на основе сообщений из Службы, переданных через Обработчик.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

+0

Да Моя активность отображается нормально, но когда я нажимаю кнопку меню, ничего не происходит –

ответ

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

Приветствия! Я весь вечер вытягивал волосы, потому что два моих действия не отображали «глобальное меню», даже если они унаследованы от одного и того же «базового класса глобального меню». Оказывается, проблема была именно тем, что вы указали: некоторые автоматически созданный метод onKeyDown в моих действиях захватили. СПАСИБО ВАМ ТАК! – Spock

2

Try вызова супер метод в переопределен 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; 
} 
Смежные вопросы