【问题标题】:Why does the Android onCreateOptionsMenu method return super.onCreateOptionsMenu?为什么Android onCreateOptionsMenu 方法返回super.onCreateOptionsMenu?
【发布时间】:2014-09-28 07:46:53
【问题描述】:

由于我是 Android 编程新手,我遇到了另一个我不明白的小事。为什么下面的 onCreateOptionsMenu 方法返回 super.onCreateOptionsMenu 而不是仅仅调用 super.onCreateOptionsMenu(就像在 onCreate 方法中所做的那样)?

(来自Android tutorial。)

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_activity_actions, menu);
    return super.onCreateOptionsMenu(menu);
}

(我在 StackOverflow 上没有发现重复的问题。我可能在问一个愚蠢的问题,或者我只是不擅长搜索。)

【问题讨论】:

  • hmmm 调用超类的 onCreateOptionsMenu 但最好返回did_i_create_menu_in_derived_class || super.onCreateOptionsMenu(menu),在此示例中始终为true ...来自文档Returns: You must return true for the menu to be displayed; if you return false it will not be shown.
  • 它允许超类实现执行和。如果您扩展的 Fragment 或 Activity 已经有一些您希望包含在子类实现中的基本菜单项,这将非常有用。
  • 因为它必须返回一些东西。因为它是一个布尔方法等等。

标签: java android return super oncreateoptionsmenu


【解决方案1】:

onCreate() 的返回类型为 void,而 onCreateOptionsMenu() 返回布尔值,这就是 return 的原因。

【讨论】:

  • 但它的工作原理都一样吗?我是否也可以在一行上执行“super.onCreateOptionsMenu(menu)”并在下一行执行“return true”?
  • super.onCreateOptionsMenu(menu); return true;
  • 你可以这样做,但通常最好返回超级实现。
  • 哦,我明白了。好吧,我希望我能设置两个接受的答案......不过非常感谢! :)
【解决方案2】:

super.onCreateOptionsMenu(menu): 将执行任何必须执行的代码才能使选项菜单正常工作。您编写的代码添加了额外的功能/决定了选项菜单的属性。

【讨论】:

  • 这和 onCreate 方法中的 super.onCreate(savedInstanceState) 有点像,对吧?但是为什么会在这里返回而不是直接调用呢?
  • @PenguinCake 因为这个方法的返回类型是布尔值,所以你调用 super(它的返回类型也是布尔值)它会做它需要做的所有事情,并且还返回 true 以便调用代码可以顺利进行。如果 super 返回 false,那么肯定有什么地方很不对劲,这是一种让事情变得显而易见的方法。
【解决方案3】:

必须返回true才能显示菜单,如果返回false则不会显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多