Android 开发中踩过的坑之十二: ListView中的焦点抢夺

旧巷老猫 提交于 2019-12-06 23:55:07

当ListView设置了OnItemClickListener, Item项里的View设置了OnClickListener时, 

经常遇到某一个Listener失效的现象.

根本原因是焦点的问题, 

当item项目中某个View能够获取焦点时, 根据View焦点传递的规则会优先接受点击事件,

如此就会导致ListView的OnItemClickListener失效.

因为能够自动获取焦点的View有优先获取点击事件的权利,

OnItemClickListener是在Item的父节点, 所以它是最后一个处理点击事件的(虽然最先接收, 

但是先分发给子View, 子View处理完后, 最后自己处理). 如果子View处理并消化了点击事件, 

那么OnItemClickListener久失效了.


解决的方法:

1 你可以放弃OnItemClickListener, 只是用OnClickListener.

2 检查你的Item里, 时候有focusable=true 和 focusableInTouchMode=true的View. 

    如果有, 把他们都设置成false. 




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!