好久没有写过什么东西了。今天在调整一个Android应用的时候,让一个问题给卡了一下。出现这个问题给了我一个很大的警钟。
在Android中,如果使用ListView一类的View,里面会有Item,而Item中又会有像CheckBox,Button这种控件。如果再使用ListView的setOnItemClickListener,就会遇到一个问题。setOnItemClickListener的设置无效。点击Item,OnItemClickListener不会响应。这个原因是CheckBox占用了focus,导致ListView没法占用focus。解决方法是将CheckBox的focusable设置为false,或者在Item的顶级VIewGroup设置android:descendantFocusability="blocksDescendants"
。其中descendantFocusability有三个值具体如下:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
descendantFocusablility取值
网上很多人都介绍这些,但是三个值设置的具体效果和情况就很少人介绍了。
afterDescendants
在Android中默认值是为afterDescendans,子类控件会占用焦点。英文原文为 只有当其子类控件不需要获取焦点时才获取焦点,也就是说如果他有一个子类控件