其实我对android源码基本不懂,也很少会写,偶尔会写布局的一些代码,昨天组里的一个小姑娘问了我一个关于ListVIew的OnItemLongClickListener的问题,有的ItemView会调用,有的不会调用,她感到很奇怪,我其实也不太懂,于是就翻翻源码看了看,然后给她写了篇邮件,以下就是邮件内容了,
首先通过ListView.setOnItemLongClickListener(listener)
1. item view 设置setOnClickListener,或者 setOnLongClickListener
在长按某个view的时候, 根据android的事件分发机制,会先调用父view的 dispatchTouchEvent(MotionEvent ev)
这里的listView会调用到ViewGroup的
dispatchTouchEvent(MotionEven
t ev),查看这个函数,内部会调用
boolean dispatchTransformedTouchEvent(MotionEvent event, boolean cancel, View child, int desiredPointerIdBits)
这个函数,会将事件分发到child view, 通过调用child view的
public boolean dispatchTouchEvent(MotionEvent event), 得到返回结果,如果child view返回true, 也就是child view消耗了这个事件, 父view则不会再处理
继续看child view的这个函数dispatchTouchEvent,注意看这部分代码
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnTouchListener != null
&& (mViewFlags & ENABLED_MASK) == ENABLED
&& li.mOnTouchListener.onTouch(this, event)) {
result = true;
}
if (!result && onTouchEvent(event)) {