【问题标题】:Is super.onCreateContextMenu() required?是否需要 super.onCreateContextMenu()?
【发布时间】:2014-06-06 09:04:59
【问题描述】:

我有一个 ActionBarActivity(来自 v7 支持库),它加载了一个 fragment(来自 v4 支持库)。我在片段中实现了onCreateContextMenu(),如下所示:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}

为了了解是否真的需要调用 super 方法,我仔细研究了 android 源代码:

  1. Fragment,只有一行代码:

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        getActivity().onCreateContextMenu(menu, v, menuInfo);
    }
    
  2. ActionBarActivity,没有onCreateContextMenu()。

  3. 由于ActionBarActivity 是FragmentActivity 的子类,所以我查看了here,它也没有onCreateContextMenu()。

  4. 由于FragmentActivity 是Activity 的子类,我查看了here。它的方法是空的:

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    }
    

我的结论是调用 super 方法没有意义。然而,official documentation 确实调用了 super。所以我的结论错了吗?如果有,为什么?

【问题讨论】:

    标签: android android-contextmenu


    【解决方案1】:

    你的结论是对的,文档只是有一行多余的代码,这并没有什么坏处。

    其他方法,如onCreate()、onResume() 等。但是,确实需要调用父类中的方法,如果不调用,则抛出运行时异常。

    【讨论】:

    • 听到您的同意,我松了一口气。但我仍然很好奇,如果它什么都不做,他们为什么会添加那条线。我想知道某处是否对此有一些解释。
    • 文档仅由人类制作。有大量的文档,所以并不是每一行都是 100% 完美的。
    • 另一种解释:当你在一个类中使用 Eclipse 的自动完成方法创建一个被覆盖的方法时,它会自动添加一个 super.methodName() 调用。也许该示例的作者也不确定是否需要该调用并将其留在那里。
    • 嗯..但是 Eclipse 的自动完成没有填写 onCreateContextMenu()。我会接受你的人为错误理论。
    猜你喜欢
    • 2020-11-06
    • 2012-01-27
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2019-08-16
    相关资源
    最近更新 更多