android gridview onitemclick /actiondown无效,解决方法之一

GridView设置Ontouch监听事件,本是想通过ACTION_DOWN时记录下按下的坐标. 在ACTION_MOVE时,判断移动的Y轴的距离,在一定范围时,做一些事情.
代码写好了.运行后发现并没有出现期望的结果.这么简单地一个功能,居然不能如我所愿.
要想达到预期结果,必须找到症结,我的第一想到的是事件冲突,后一想这简单一个组件,一个Gridview一个适配器一个TextView,没过多的嵌套,会出现事件冲突?
1.
然后我就检查了一遍距离是不是算得不对,
经过仔细排查计算的是没有问题的.
2.
只能DEBUG再找找是不是数据问题.
DEBUG时发现,在按下时,ActionDOWN 并没有被触发.这导致了没有出来正确的结果.
3.
经过DEBUG,可以断定是ActionDOWN事件被消费了.
为了搞清楚OnItemCLick 和OnScrollListener 和Ontouch 之间是不是有冲突. 我新建了一个DEMO ,发现ActionDOWN OnItemClick是可以正常触发的;
4.
怀疑是GridVIew包含的子控件TextVIew导致的, 所以在GridVIew的适配器getView在把TextView的OnClick事件去掉了;
发现GridView 的onitemclick /actiondown 还不能正常的触发;
5.
给GridVIew 添加了锁定或先于子控件获取焦点的方法 descendantFocusability=”blocksDescendants”,结果还是不正常
6.找TextView本身.发现TextView在xml在被设置了clickable=true. 去掉该属性.
结果正常.
7.结论:在子控件被设置了clickable时,即使父控件设置blocksDescendants也无济于事.
这是由android 事件传递机制来决定的.
是时候要深入了解下Android 事件传递机制了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值