ContextMenu继承自Menu,不过二者都是interface,都是只声明不干事的,有源码为证:
难道是等到其他类implement ContextMenu的method?这些类又是什么呢?另外,在使用中直接用的是ContextMenu类的对象啊……如:
public onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info){……}哪位高手来解释?

解决方案 »

  1.   

    看以下代码,当在自定义的Acticity中调用registerForContextMenu,实现如下:
        public void registerForContextMenu(View view) {
            view.setOnCreateContextMenuListener(this);
        }
    这部分代码在Activity.java类中,它去调用View.java中的以下方法:
        public void setOnCreateContextMenuListener(OnCreateContextMenuListener l) {
            if (!isLongClickable()) {
                setLongClickable(true);
            }
            mOnCreateContextMenuListener = l;
        }
    OnCreateContextMenuListener的实现如下,也在View.java中,
        public interface OnCreateContextMenuListener {
            void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo);
        }
    整个过程如此,onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)只是回调函数而已
    而ContextMenu继承Menu,Menu最终由MenuBuilder类来实现,具体看MenuBuilder.java
      

  2.   


    不错。现在知道了,是ContextMenuBuilder实现的!