setOnItemClickListener不起作用解决方法

setOnItemClickListener不起作用解决方法

  • 问题
  • 原因
  • 源码解析
  • 解决方法

问题

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

原因

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

源码解析

可以看到descendantFocusability有三个属性值
setOnItemClickListener不起作用解决方法_第1张图片

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

解决方法

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

你可能感兴趣的:(Android,错误解决方法,android)