我正在阅读一个教程,它显示了这个示例代码来创建一个菜单:
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,但是我没有它,它的工作原理。我很困惑,如果明确地重写方法是否有必要。我很感激帮助。如果需要澄清,请告诉我。
答案 0 :(得分:3)
解决您的两个具体问题:
super.onCreateOptionsMenu
:一般来说,当您打算优化其操作时,以这种方式调用基类函数是个好主意。在这种情况下它没有区别(据你所知),但是文档推荐它,所以你应该执行它以确保未来的Android版本兼容性。@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它会清楚地解释你。