关于listview 的setOnItemClickListener失效问题

当ListView的setOnItemClickListener不响应点击时,可能由事件分发、子视图拦截或焦点问题引起。检查上层控件是否拦截事件,内部子视图是否可聚焦,以及上层控件的焦点设置。通过调整这些方面,通常可以解决点击事件失效的问题。
摘要由CSDN通过智能技术生成

正常情况下,为 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,就代表拦截掉此任务,而任务会在带空间/容器的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值