我有一个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源码挖掘如下:
片段 - 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); }
ActionBarActivity - http://androidxref.com/4.4.2_r2/xref/frameworks/support/v7/appcompat/src/android/support/v7/app/ActionBarActivity.java,但没有onCreateContextMenu()。
由于ActionBarActivity是FragmentActivity
的子类,因此我会查看http://androidxref.com/4.4.2_r2/xref/frameworks/support/v4/java/android/support/v4/app/FragmentActivity.java。但是没有onCreateContextMenu()。
由于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){ }
所以我得出结论,没有必要调用super方法。但官方文档确实称为super(http://developer.android.com/guide/topics/ui/menus.html#context-menu)。我的结论错了,为什么?
答案 0 :(得分:1)
你的结论是对的,文档中只有一行代码,没有任何损害。
其他方法,例如onCreate()
,onResume()
等。确实需要调用父类中的方法,如果未调用它们则抛出运行时异常。< / p>