Я нашел что-то смущенное для меня в этой статье
http://developer.android.com/guide/topics/ui/menus.html
Ниже приведен простой фрагмент кода и вывод
Когда я запускаю приложение на Android 3.0
- и 2. Строка системы выполняется, как только действие создано
Строки 3. и 4. были напечатаны при нажатии меню и выборе пункта меню
Probem - это строка 5 и метод buttonHandler, который вызывает invalidateOptionsMenu ();
и результатом этих вызовов является строка 6 и 7
Почему системные вызовы onCreateOptionsMenu перед onPrepareOptionsMenu, даже если они написали
На Android 3.0 и выше, вы должны вызывать invalidateOptionsMenu (), когда вы хотите обновить меню, потому что меню всегда открыто. Затем система вызовет OnPrepareOptionsMenu (), чтобы вы могли обновить пункты меню.
В этом случае onCreateOptionsMenu вызывается каждый раз после invalidateOptionsMenu (),
но когда я запускаю приложение на android 2.3, onCreateOptionsMenu вызывалось только один раз.
1 INFO / System.out (382): onCreateOptionsMenu
2 INFO / System.out (382): onPrepareOptionsMenu
3 INFO / System.out (382): onPrepareOptionsMenu
4 INFO / System.out (382): onOptionsItemSelected
5 INFO / System.out (382): buttonHandler
6 INFO / System.out (382): onCreateOptionsMenu
7 INFO / System.out (382): onPrepareOptionsMenu
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public boolean onCreateOptionsMenu(Menu menu) {
System.out.println("onCreateOptionsMenu");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.game_menu, menu);
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
System.out.println("onPrepareOptionsMenu");
return super.onPrepareOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
System.out.println("onOptionsItemSelected");
return super.onOptionsItemSelected(item);
}
public void buttonHandler(View v){
System.out.println("buttonHandler");
invalidateOptionsMenu();
}