3

我正在学习一个教程,它显示了这个示例代码来制作一个菜单:

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

我遇到了一个错误,所以我把它改成了布尔值,这就是现在的样子,所以我这样做了,它的工作原理:

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

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

了解为什么 onCreateOptionsMenu 不显示菜单

Android 文档也有这个:

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

对 super 的调用在哪里?为什么没有必要?如果我做错了,制作菜单的正确方法是什么?

当我谈到这个主题时,Doc 也显示了@Override,但我没有它,它的工作原理。如果这些方法被显式覆盖,我只是对这是否有必要感到困惑。我很感激帮助。如果需要任何澄清,请告诉我。

4

3 回答 3

3

要解决您的两个具体问题:

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

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

于 2012-05-15T05:13:59.700 回答
1

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

于 2012-05-15T04:34:57.303 回答
0

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

@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;
}

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

于 2012-05-15T04:59:45.290 回答