setOnItemClickListener不起作用解决方法

简介: setOnItemClickListener不起作用解决方法

问题

使用ListView时通常会和Adapter一起使用,在使用setOnItemClickListener方法监听节点时不起作用

原因

原因是因为在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件,此时这些子控件会获取到焦点,所以常常当点击item时变化的是子控件,item本身的点击没有响应,此时就该用到descendantFocusability属性了,下面让我们看看源码

源码解析

可以看到descendantFocusability有三个属性值


<enum name="beforeDescendants" value="0" />:ViewGroup将在它的任何后代之前获得焦点
<enum name="afterDescendants" value="1" />:只有当它的后代都不需要它时,ViewGroup才会获得焦点
<enum name="blocksDescendants" value="2" />:ViewGroup将阻止它的后代接收焦点

解决方法

在Item布局的根布局加上属性:android:descendantFocusability=“blocksDescendants”

即可

目录
相关文章
|
9月前
|
安全 网络架构
电脑维修常遇到等等相关问题及解决方法?
电脑维修常遇到等等相关问题及解决方法?
|
11月前
|
数据库
学生错误‘3704‘解决方法
学生错误‘3704‘解决方法
|
10月前
chatr 命令不可用 解决办法
chattr 命令 不存在
347 0
|
存储 监控 前端开发
行动策略过于复杂怎么办?试试下面一些解决方法
随着使用SLS告警越来越深入,有些用户的行动策略会配置的特别复杂,有些时候可以让用户通过创建多个行动策略来进行一定的精简,但是在一些场景下,用户是无法创建多个行动策略的。
216 0
行动策略过于复杂怎么办?试试下面一些解决方法
|
应用服务中间件 nginx
今日所遇到的问题+解决方法
今日在阿里云轻量应用服务器部署LNMP时所遇问题
|
安全 Windows
ToolStripStatusLabel 没有 InvokeRequired 属性的解决办法
ToolStripStatusLabel 没有 InvokeRequired 属性的解决办法 当编写多线程程序时,你希望在线程中修改 Form 窗体上的控件的文本等属性, 但你会得到一个错误:线程间操作无效: 从不是创建控件“xxx”的线程访问它。
1610 0