ListView子控件焦点问题

   自定义ListView的时候经常要继承BaseAdapter,如果ListView的每个Item有自己独立的监听事件,比如Button,ImageButton之类的,这样很容易造成焦点冲突,往往造成Item的焦点被

子控件获取,而子控件又不响应事件。这时候可以用Android的descendantFocusability来处理,API中对descendantFocusability属性的解释:
      beforeDescendants:viewgroup会优先其子类控件而获取到焦点
      afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
      blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
解决这个问题只需要用到blocksDescendants属性就行,即覆盖子类控件获取焦点,其实这个属性是加在Item布局的根节点上,同时给子控件加上 android:clickable="true"、

android:focusable="false"两个属性,这样的话每个Item都能优先于子控件获取焦点,子控件因为设置focusable为false,在初始化的时候不会获取焦点,clickable的属性让它处于可点

击的状态,这样一来Item的点击事件跟子控件的点击事件完全分开了。不过在Item里面慎用ImageButton,ImageButton用此种方式是解决不了,具体原因没去查,应该跟焦点优先程度有关

,很多人都遇到类似的问题,如果非要用ImageButton可以尝试用ImageView来代替。

         如果子控件的background用了select

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值