正常情况下,为 listview 设置的 setOnItemClickListener 后,当用户点击 listview 的子选项item时就会触发改方法,可是有时候特别的苦恼,明明已经为 listview 设置了监听,可是就点击 listview 的 item 时,却一点响应都没有,接下来我为大家分析一下。
这是有关事件的分发问题,建议先阅读本人的上一篇博客 android事件的分发机制 ,有了这个基础,我们就能更快的了解这其中的道理。
解释:
我们先来看看事件分发机制的结构图(我自己画的,比较丑)
我们的listview就是图中的view控件,当然图中的view控件中可以有很多个,它们是一层层把事件传递下去的(假如我们在listview里面放入一个button,那么该button也是view控件,它位于listview的下层),ok,要listview不能够被点击有下面两种可是:
1、被处于listview上面的view给拦截了
故事:我们把图看成公司的职位关系, 当总部分配一件任务下来,首先拿到的是最上层的领导,如果位于员工listview上层的“领导们”觉得这任务得自己干,那么他就不会把任务分配给下属,自己把任务给办了,这时候员工listview就接受不到任务了。
技术:“领导“就是位于listview上层的控件或者容器,他们拦截的方法是重写dispatchTouchEvent()返回true,就代表拦截掉此任务,而任务会在带空间/容器的