您的位置:首页 > 其它

关于listview中item无法获去焦点的问题

2014-08-13 15:35 267 查看
描述:在做删除短信功能时候,进入删除界面时候在每条短信后面显示一个checkbox,便于选择要删除的记录,需要的功能是点击item后checkbox会被选中,然后就碰到一个很奇怪的问题,解决了一半天才解决,问题如下:

问题一:listview中的item有的可以点击,有的不能点击,更有甚者有的item刚开始可以点击,隔一会之后又不能点击。

问题二:解决好了问题一之后,发现带有autolink的item依然无法获取焦点

问题一的解决:

在网上搜索了关于listview的子控件覆盖了item事件,网上有很多介绍,原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以

说是Button或者 Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。

这时候我们可以使用descendantFocusability属性解决

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

属性的值有三种:

beforeDescendants:viewgroup会优先其子类控件而获取到焦点

afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。

问题二的解决:

由于在对应的item中的textview定义了android:autoLink="phone",通过阅读textview的源码在textview源码中,







,在定义了这个变量后,textview会被focus,所以导致我们还是无法获取item的焦点,

解决方案,在删除短信死后,直接对此textview调用setMovementMethod方法

如下 textview. setMovementMethod(null);发现此方案可行。解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: