ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

开发中常常需要自己定义Listview,去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。

如果你的自定义ListViewItem中有Button、ImageButton或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus。所以常常当点击item时变化的是子控件,item本身的点击没有响应。

这时候就可以使用descendantFocusability属性来解决,他可以设置一个控件如何处理触摸事件,

该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

[html] view plain copy
  1. android:descendantFocusability="blocksDescendants" //viewgroup会覆盖子类控件而直接获得焦点android:focusable="false"  
  2. android:descendantFocusability="beforeDescendants" //viewgroup会优先其子类控件而获取到焦点  
  3. android:descendantFocusability="afterDescendants"   //viewgroup只有当其子类控件不需要获取焦点时才获取焦点  

因此我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendants”来解决,这样Item Layout就屏蔽了所有子控件获取Focus的权限,如此就可以顺利的响应onItemClickListener中的onItenClick()方法了。

你可能感兴趣的:(Android笔记)