前两天我在写一个ListView,其中自定义的item中的控件有ImageView、TextView、Button,反正是比较复杂,写完一整套流程后,真机一运行,诡异的事情出现了,点击item居然无响应。这怎么回事呢?找了又找,代码看了一遍又一遍,没问题啊也,怎么回事呢这是?!!
开发中很常见的一个问题,项目中的ListView不仅仅是简单的文字,常常需要自定义ListView,自己的Adapter去继承BaseAdapter,在Adapter中按照需求去编写,但是有时候就想我上面说的,当一个item有多个控件的时候可能点击每一个item都没有反应,无法获取焦点。但是代码都没问题,原因多半是自己item中的哪些控件会将焦点获取到,所以常常点击item时变化的时子控件,item本身没有响应。
后来我看了看官方文档,在我的item中的父控件(根布局)中加了一条属性:
android:descendantFocusability="blocksDescendants"
该属性当一个view获取焦点时,定义ViewGroup会覆盖子类控件而直接获取焦点。
来看一下API描述:
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
PS:参考 https://blog.csdn.net/u010838555/article/details/42243075