您的位置:首页 > 移动开发 > Android开发

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

2015-12-09 14:21 399 查看
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 事件传递机制了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: