大家都知道listview可以根据自己的需求,重写baseadapter ,实现自己的布局及数据,但是当我们在自己的布局中加入了button或者ImageButton,还有其他比如checkbox,radiobutton等控件时,发现listview不在响应onitemclick事件,让人很悲愤啊,自己在网找了个方法,可以处理掉这个东东
发生的原因:当listview中包含button,checkbox等控件的时候,android会默认将focus给了这些控件,也就是说listview的item根本就获取不到focus,所以导致onitemclick时间不能触发。
既然我们知道了,发生的原因,那么我们就将button等控件的在xml布局文件中的属性android:focusable设置为false,就ok了,但通常不这样做,因为要一个一个地修改button太麻烦,通常可以修改这些button的父容器的descendantFocusability属性为false,是否很方便呢,这样即可以触发onitemclick事件,同时我们在baseadapter实现类中也可以处理button等控件的事件,两不相误。
参考:http://blog.youkuaiyun.com/xanxus46/article/details/8348931
android:descendantFocusability="blocksDescendants"
Google给出的官方解释为:Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.(这个属性定义了——当系统需要找一个View去获取焦点的时候,系统应该如何处理ViewGroup和其子节点(或“子控件”)之间的关系。)
可以选择三者之一: afterDescendants(在子节点之后), beforeDescendants(在子节点之前), blocksDescendants(阻塞子节点)