我在本文中发现了一些让我感到困惑的事情 http://developer.android.com/guide/topics/ui/menus.html
下面是简单的代码和输出 当我在android 3.0上启动应用程序时
按下菜单并选择菜单项时打印了3.和4.行
Probem是第5行和buttonHandler方法,该方法调用invalidateOptionsMenu(); 调用的结果是第6行和第7行
为什么系统在onPrepareOptionsMenu之前调用onCreateOptionsMenu,即使他们已经写过
在Android 3.0及更高版本中,如果要更新菜单,则必须调用invalidateOptionsMenu(),因为菜单始终处于打开状态。然后系统将调用onPrepareOptionsMenu(),以便您可以更新菜单项。
在这种情况下,每次在invalidateOptionsMenu()之后调用onCreateOptionsMenu, 但是当我在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();
}
答案 0 :(得分:3)
这可能是一个文档错误。我希望在onCreateOptionsMenu()
之后调用invalidateOptionsMenu()
。