onClick和onLongClick能同时发生吗?

要弄清楚这个问题只要理解Android对事件处理的所谓消费(consume)概念即可,一个用户的操作会被传递到不同的View控件和同一个控件的不同监听方法处理,任何一个接收并处理了该次事件的方法如果在处理完后返回了true,那么该次event就算被完全处理了,其他的View或者监听方法就不会再有机会处理该event了。

onLongClick的发生是由单独的线程完成的,并且在ACTION_UP之前,而onClick的发生是在ACTION_UP后,因此同一次用户touch操作就有可能既发生onLongClick又发生onClick。这样是不是不可思议?所以及时向系统表示“我已经完全处理(消费)了用户的此次操作”,是很重要的事情。例如,我们如果在onLongClick()方法的最后return true,那么onClick事件就没有机会被触发了。

下面的Log是在onLongClick()方法return false的情况下,一次触碰操作的基本时序:

04-05 06:00:53.023: DEBUG/TSActivity(277): onTouch ACTION_DOWN

04-05 06:00:53.533: DEBUG/TSActivity(277): onLongClick

04-05 06:00:55.603: DEBUG/TSActivity(277): onTouch ACTION_UP

04-05 06:00:55.663: DEBUG/TSActivity(277): onClick

可以看到,在ACTION_UP后仍然触发了onClick()方法。



转自:http://blog.csdn.net/ddna/article/details/5451722

更多相关文章

  1. AsyncTask的使用半解--!
  2. Android(安卓)高级UI解密 (五) :PathMeasure截取片段 与 切线(新思
  3. Android(安卓)Studio 中高德地图申请key和获取sha1及配置的几点
  4. android监听自身被卸载的方法
  5. Android属性动画完全解析(下) Interpolator和ViewPropertyAnimat
  6. 一次重拾Android(安卓)Studio开发的经历
  7. Android从源码的角度彻底理解事件分发机制的解析(下)
  8. Android(安卓)apk安装过程及Java、JNI读取安装包内assets资源文
  9. Android(安卓)NDK开发(1)----- Java与C互相调用实例详解

随机推荐

  1. android 7自定义相机预览及拍照功能
  2. 开发第四天
  3. SpringMVC+Volley实现Android端上传文件
  4. 网络请求Volley篇【Android】
  5. Android(安卓)禁止RecyclerView 上下滚动
  6. 从Android(安卓)init.rc到SystemServer.j
  7. Android画布(cavas)
  8. [init.rc] android开机过程执行shell脚本
  9. JetBrains与谷歌合作开发新一代Android开
  10. Android系统源码阅读(17):Android(安卓)应用