今天遇到一个问题,我在一个ListView中嵌套了另一个ListView,内层ListView通过点击外层ListView中的一个Item中的按钮显示出来,可是显示出来之后,问题出现了。
外层ListView的ItemOnclick方法不调用了。内层ListView隐藏的时候就可以调用。
后来查到,是因为内层ListView抢占了焦点,只要让外层ListView重新获取焦点即可。
在外层ListView的Item的Xml文件的最外部加上这句话
android:descendantFocusability="blocksDescendants"解释下这句话:
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.
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了