有时候,当ListView中的每一个item是自定义的View时,有可能会导致ListView的OnItemClickListener的listener无法调用,请看如下情况:

如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而 ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的 focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了。

我们可以通过对Item Layout的根控件设置其android:descendantFocusability="blocksDescendants"即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItemClick()方法了。

总结: 

原因:

ListView中的Item内部的View获得了焦点,如Button, Checkbox等。

解决办法: 

不要让ListView中的Item内部的View获得焦点就OK了,这样做:android:descendantFocusability="blocksDescendants"

public static final int descendantFocusability

Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.

Constant Value Description
beforeDescendants 0 The ViewGroup will get focus before any of its descendants.
afterDescendants 1 The ViewGroup will get focus only if none of its descendants want it.
blocksDescendants 2 The ViewGroup will block its descendants from receiving focus.

注意:
还有一种情况也会导致OnItemClickListener或OnItemLongClickListener回调不会执行,那就是ListView的child设置了onClickListener或onLongClickListener。我们可以通过源代码看出,在你调用setOnClickListener()方法后,它会调用setClickable(true),在onTouchEvent里面的实现如下:

[java] view plain copy
  1. if (((viewFlags & CLICKABLE) == CLICKABLE ||
  2. (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
  3. // ....
  4. return true;
  5. }

当一个View在onTouchEvent里面返回true后,ListView就不会正常接收到事件。

转载于:https://www.cnblogs.com/exmyth/p/5387153.html

Android ListView不响应OnItemClickListener解决办法相关推荐

  1. android notifydatasetchanged 刷新错误,Android 调用notifyDataSetChanged方法失败解决办法

    Android 调用notifyDataSetChanged方法失败解决办法 如果使用ListView.GridView等进行数据展示,当绑定的数据有了更新的时候,需要实时刷新ListView,即调用 ...

  2. Android之内存泄漏以及解决办法(持更)

    Android之内存泄漏以及解决办法 文章链接:http://blog.csdn.net/qq_16628781/article/details/67761590 知识点: 单例造成的内存泄漏原因和解 ...

  3. ListActivity的onListItemClick不响应的解决办法

    当ListActivity的行中含有checkbox和button等会自动得到焦点的控件时,ListActivity的onListItemClick会不响应,解决办法有二: (原文地址:http:// ...

  4. Xamarin Android SDK无法更新的解决办法

    Xamarin Android SDK无法更新的解决办法 Xamarin Android SDK无法更新的解决办法,更新时候,提示警告信息:A folder failed to be moved.出现 ...

  5. win10资源管理器卡死无响应终极解决办法(亲测有效)

    前言 之前电脑从win10家庭版升级到win10专业版之后,就开始出现资源管理器卡顿,无响应的情况,尤其是再浏览器或者第三方应用里面打开文件(另存为)时,打开资源管理器切换分区必定会导致卡顿无响应,几 ...

  6. dnf服务器未响应怎么解决方法,dnf发生未响应的解决办法途径

    在玩dnf时是否出现过电脑未响应的情况,很多玩家不知道怎么解决.下面是小编为你整理的dnf发生未响应的解决办法,希望对大家有帮助! dnf发生未响应的解决办法 内存使用率过低,电脑工作一段时间之后物理 ...

  7. DNS服务器未响应的解决办法(试过很多csdn的那些改dns的办法都没用)

    DNS服务器未响应的解决办法(试过很多csdn的那些改dns的办法都没用) VPN的问题 所以把VPN开了试试打开浏览器,再关掉 VPN的问题 情况:开启过VPN进行科学上网,然后电脑放着没关去打王者 ...

  8. Android Studio 自动更新失败解决办法

    Android Studio 自动更新失败解决办法 Dec 26th, 2014 | Comments 昨天在G+中看到Android Studio又有更新了就心血来潮想去更新体验一下,可是无论我怎么 ...

  9. android ANR产生原因和解决办法

    转自http://blog.sina.com.cn/s/blog_618199e60101kvbl.html ANR (Application Not Responding) ANR定义:在Andro ...

最新文章

  1. 关于less在DW中高亮显示问题
  2. Jenkins 部署
  3. linux中yum命令详解
  4. Qt5模型/视图结构-视图(View)
  5. Replace Error Code with Exception(以异常取代错误码)
  6. 单模光电转换器怎么接_单模光纤收发器怎么连接?
  7. Volcano plot | 别再问我这为什么是火山图
  8. 奇怪的微信内置浏览器IOS版和Anroid 版
  9. 一统江湖的大前端React.js-从开发者到工程师
  10. (14) 常用管理类软件需求征集 -- 组织机构管理
  11. html怎么让form弄成一个表,创建一个HTML表,其中每个TR是一个FORM
  12. 51单片机学习笔记8 -- OLED显示(SPI)
  13. C语言不使用中间变量交换两个变量的数据
  14. 转载_CSR867x — 说说什么是ANC、CVC、DSP降噪
  15. tdr 定位公式_时域反射计TDR原理详细解析
  16. 英语零散笔记Note整理
  17. 马云的故事:缔造阿里巴巴帝国秘诀
  18. Facebook 秘钥散列
  19. CSDN自定义模块高级设置之(2)——设置主页左则及详情页背景(打造节日气氛)
  20. Android常见设计模式——代理模式(Proxy Pattern)(二)

热门文章

  1. Linux Kernel 3.10内核源码分析--块设备层request plug/unplug机制
  2. NOIP2018比赛总结
  3. JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
  4. oc5480十六进制_oc 数据类型 | 学步园
  5. 文本分类入门(番外篇)特征选择与特征权重计算的区别
  6. 微软亚洲研究院发布“人立方关系搜索”
  7. CVPR 2018 DEDT:《Efficient Diverse Ensemble for Discriminative Co-Tracking》论文笔记
  8. Codeforces 1188 题解
  9. mysql join null_Mysql Join语法以及性能优化
  10. webrtc 语音流java_通过WebView WebRTC从麦克风传输语音时的语音识别