且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

更新时间:2021-11-06 11:51:27

 我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法

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

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

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

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

属性的值有三种:

android:descendantFocusability="blocksDescendants" //viewgroup会覆盖子类控件而直接获得焦点android:focusable="false"
android:descendantFocusability="beforeDescendants" //viewgroup会优先其子类控件而获取到焦点
android:descendantFocusability="afterDescendants"   //viewgroup只有当其子类控件不需要获取焦点时才获取焦点

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



 


                            ====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

====================================================================================

我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法