商城首页欢迎来到中国正版软件门户

您的位置:首页 >2.4.7ListView的焦点问题

2.4.7ListView的焦点问题

  发布于2026-08-12 阅读(0)

扫一扫,手机访问

本节引言

如果你往ListView的Item中添加了Button,CheckBox,EditText等控件的话,你可能需要考虑 到一个问题:ListView的一个焦点问题!本节我们就来学习下解决这个问题的几个方法!

2.4.7ListView的焦点问题

很多人都会碰到这种情况:写了一个简单的ListView,里面放了Button、CheckBox、EditText,结果一点击才发现,ListView的item根本点不动,onItemClick触发不了,onItemLongClick也一样没有反应。说白了,这其实就是ListView里很典型的焦点问题——焦点被其他子控件抢走了。那这个问题到底该怎么处理?下面就接着往下看。

方法1:为抢占了控件的组件设置:android:focusable="false"

这个问题其实不复杂,关键就在于:把抢占了 ListView Item 焦点的控件设为android:focusable="false",基本就能处理掉。
如果是通过代码来处理,那么拿到对应控件之后,直接调用:setFocusable(false) 也可以。
不过要特别说明一点,EditText 这里并不适用。因为一旦给它设置 android:focusable="false",虽然它看起来还能获取焦点,但很快又会把焦点丢掉,同时小键盘也不会弹出来。至于这个问题为什么会这样,目前还没有明确结论,外面也有人提到这可能是 ListView 的一个 bug。要是恰好有更稳妥的解决办法,那确实值得继续补上。

方法2:item根节点设置android:descendantFocusability="blocksDescendants"

如题,在Item布局的根节点添加上述属性,android:descendantFocusability="blocksDescendants" 即可,另外该属性有三个可供选择的值:

  • beforeDescendants:viewgroup会优先其子类控件而获取到焦点
  • afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
  • blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

本节小结:

好的,以上就是解决ListView焦点问题的两个方法,非常简单,如果有关于EditText 焦点问题解决方案的欢迎提出,谢谢~

本文转载于:https://www.runoob.com/w3cnote/android-tutorial-listview-focus.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注