是super.onCreateContextMenu()必需的

时间:2014-06-06 09:05:00

标签: android android-contextmenu

我有一个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. 片段 - http://androidxref.com/4.4.2_r2/xref/frameworks/support/v4/java/android/support/v4/app/Fragment.java#1313。它有一行代码:

    public void onCreateContextMenu(ContextMenu菜单,View v,ContextMenuInfo menuInfo){                 getActivity()。onCreateContextMenu(menu,v,menuInfo);             }

  2. ActionBarActivity - http://androidxref.com/4.4.2_r2/xref/frameworks/support/v7/appcompat/src/android/support/v7/app/ActionBarActivity.java,但没有onCreateContextMenu()。

  3. 由于ActionBarActivity是FragmentActivity的子类,因此我会查看http://androidxref.com/4.4.2_r2/xref/frameworks/support/v4/java/android/support/v4/app/FragmentActivity.java。但是没有onCreateContextMenu()。

  4. 由于FragmentActivity是Activity的子类,因此我会查看http://androidxref.com/4.4.2_r2/xref/frameworks/base/core/java/android/app/Activity.java#2897。该方法为空:

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

  5. 所以我得出结论,没有必要调用super方法。但官方文档确实称为super(http://developer.android.com/guide/topics/ui/menus.html#context-menu)。我的结论错了,为什么?

1 个答案:

答案 0 :(得分:1)

你的结论是对的,文档中只有一行代码,没有任何损害。

其他方法,例如onCreate()onResume()等。确实需要调用父类中的方法,如果未调用它们则抛出运行时异常。< / p>