ItemView设置了listener对ListView使用OnItemLongClickListener的影响

本文探讨了在Android中遇到的一个问题:ListView的ItemView对于OnItemLongClickListener响应不一致的情况。作者通过查看源码,尝试理解并解释了这个问题,旨在帮助读者理解为何某些ItemView能触发长按监听器而有些不能。
摘要由CSDN通过智能技术生成

其实我对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)) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值