在Android中创建菜单的正确方法是什么?

时间:2012-05-15 04:25:21

标签: android android-activity android-menu

我正在阅读一个教程,它显示了这个示例代码来创建一个菜单:

public void onCreateOptionsMenu(Menu m) {
        super.onCreateOptionsMenu(m);
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.time_list_menu, m);
    }

我收到了一个错误,因此我将其更改为boolean,这就是现在的情况,所以我做了这个,而且它正在工作:

public boolean onCreateOptionsMenu(Menu m) {
      super.onCreateOptionsMenu(m);
      MenuInflater menuInflater = getMenuInflater();
      menuInflater.inflate(R.menu.time_list_menu, m);
      return true;
  }

但是我也有类似这样的东西来自堆栈溢出的另一个问题

Understanding why onCreateOptionsMenu is not displaying a menu

Android doc也有:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
  }

超级电话去哪了,为什么没有必要?如果我做错了,制作菜单的正确方法是什么?

虽然我在讨论这个主题,但Doc也会显示@Override,但是我没有它,它的工作原理。我很困惑,如果明确地重写方法是否有必要。我很感激帮助。如果需要澄清,请告诉我。

3 个答案:

答案 0 :(得分:3)

解决您的两个具体问题:

  1. super.onCreateOptionsMenu:一般来说,当您打算优化其操作时,以这种方式调用基类函数是个好主意。在这种情况下它没有区别(据你所知),但是文档推荐它,所以你应该执行它以确保未来的Android版本兼容性。
  2. @Override:这个注释是自愿的,但非常有用,它确保方法签名与底层基类的签名相匹配。这意味着如果你声明方法略有错误(在与覆盖的方法不同的意义上),编译器将会发现差异(而不是仅考虑它是一种新方法而不是在上下文中调用它)< / LI>

    因此,如果不是严格需要,两者都是有用和正确的。

答案 1 :(得分:1)

你必须调用super,javadoc说会影响菜单的订购过程。我认为呼唤位置没有特别的意义。

答案 2 :(得分:0)

要创建android Menu选项,请使用以下代码。

@Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId()) 
    {
    case R.id.yourItemID:
        //do whatever you want here
        break;
    case R.id.yourItemID:
        //do whatever you want here
        break;
    }
    return true;
}

上面的代码对我来说很好。试试这个tutorial它会清楚地解释你。