问题
使用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”
即可