博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ListView不响应OnItemClickListener解决办法
阅读量:5278 次
发布时间:2019-06-14

本文共 1484 字,大约阅读时间需要 4 分钟。

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

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

我们可以通过对Item Layout的根控件设置其: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] 
 
 
  1. if (((viewFlags & CLICKABLE) == CLICKABLE ||  
  2.                 (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {  
  3.   
  4.     // ....  
  5.   
  6.     return true;  
  7. }  

 

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

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

你可能感兴趣的文章
如何挂载阿里云的数据盘
查看>>
block extends include三者的差别跟用法
查看>>
服务器安全
查看>>
系统学习qsort1 尤其partition
查看>>
yield生成器对象返回Fiabs元素 分类: python 小练习 ...
查看>>
HDU 1001 Sum Problem
查看>>
BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)
查看>>
Android学习笔记1:初识框架
查看>>
bzoj 2005
查看>>
杜教筛模板
查看>>
浅谈委托事件
查看>>
装箱问题
查看>>
C++:重载全局new/delete实现跨平台多线程内存检测
查看>>
文法解释修改
查看>>
Spring中的@Controller和 @RestController 的区别以及@ReqeustMapping的作用
查看>>
ajax不跳转页面的快速删除操作,可添加美观样式
查看>>
使用HTML语言和CSS开发商业站点(7)
查看>>
第四章例4-3
查看>>
O the joy of having nothing / 아무것도 갖지않고
查看>>
[COURSE_PTHE] 19. 密码学
查看>>