方法onCreateOptionsMenu的不同行为

时间:2011-05-17 09:12:53

标签: android menu

我在本文中发现了一些让我感到困惑的事情 http://developer.android.com/guide/topics/ui/menus.html

下面是简单的代码和输出 当我在android 3.0上启动应用程序时

  1. 和2.在创建活动后立即执行行系统
  2. 按下菜单并选择菜单项时打印了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();
    }
    

1 个答案:

答案 0 :(得分:3)

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