我在这篇文章中发现了一些困惑
http://developer.android.com/guide/topics/ui/menus.html
下面是一段简单的代码和输出
当我在android 3.0上启动应用程序时
和2。创建活动后立即执行的行系统
3号。和4。当按下菜单并选择菜单项时打印行
probem是第5行和buttonhandler方法,该方法调用invalidateoptionsmenu();
结果是6号线和7号线
为什么系统在onPrepareOptions菜单之前调用onCreateOptions菜单,即使它们已经编写好了
在android 3.0及更高版本上,如果要更新菜单,必须调用invalidateoptionsmenu(),因为菜单始终处于打开状态。然后系统将调用onPrepareOptionsMenu(),以便您可以更新菜单项。
在这种情况下,每次在invalidateoptionsmenu()之后调用oncreateoptionsmenu,
但当我在android 2.3上启动应用程序时,oncreateoptions菜单只调用了一次。
1 info/system.out(382):oncreateoptions菜单
2信息/系统输出(382):onPrepareOptions菜单
3信息/系统输出(382):onPrepareOptions菜单
4信息/系统输出(382):选择了选项项
5信息/系统输出(382):按钮手柄
6 info/system.out(382):oncreateoptions菜单
7信息/系统输出(382):onPrepareOptions菜单

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();
}

最佳答案

这可能是一个文档错误。我希望onCreateOptionsMenu()invalidateOptionsMenu()之后被调用。

10-08 16:39