有关ListView的每一行无法点击的问题
来源:互联网 发布:西安聚赢网络 编辑:程序博客网 时间:2024/06/07 09:28
有时候,当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.
ConstantValueDescriptionbeforeDescendants0The ViewGroup will get focus before any of its descendants.afterDescendants1The ViewGroup will get focus only if none of its descendants want it.blocksDescendants2The ViewGroup will block its descendants from receiving focus.
注意:
还有一种情况也会导致OnItemClickListener或OnItemLongClickListener回调不会执行,那就是ListView的child设置了onClickListener或onLongClickListener。我们可以通过源代码看出,在你调用setOnClickListener()方法后,它会调用setClickable(true),在onTouchEvent里面的实现如下:
- /**
- * Register a callback to be invoked when this view is clicked. If this view is not
- * clickable, it becomes clickable.
- *
- * @param l The callback that will run
- *
- * @see #setClickable(boolean)
- */
- public void setOnClickListener(OnClickListener l) {
- if (!isClickable()) {
- setClickable(true);
- }
- getListenerInfo().mOnClickListener = l;
- }
- if (((viewFlags & CLICKABLE) == CLICKABLE ||
- (viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
- // ....
- return true;
- }
当一个View在onTouchEvent里面返回true后,ListView就不会正常接收到事件。
- 有关ListView的每一行无法点击的问题
- PopupWindow中ListView无法点击的问题
- Listview中item无法点击的问题
- 点击tr选中每一行前面的checkbox
- 如何在table的每一行添加点击事件
- android listView的每一行里面 有checkbox
- 有关ListView.setOnItemClickListener点击无效的解决方法
- listview在activitygroup切换后无法点击的问题
- listview每一行显示不一样的控件!已更新,原来的有点儿小问题,会在内容中指明!
- listview每一行显示不一样的控件!已更新,原来的有点儿小问题,会在内容中指明!
- Android开发之去掉listview的点击效果,一行代码间接粗暴,解决你的问题。
- 有关ListView注意的问题
- 通过android:descendantFocusability解决listview每一项或项中view无法获取焦点的问题
- listview获得每一项的点击,长按,滑动事件
- 显示每一行的序号
- 数据库每一行的长度
- ListView的item点击问题
- 点击listView控件只有第一行有反应的解决办法
- phpcms单页的标题显示
- 体验用数组法求一个数的N进制数(N由键盘输入)
- InnoDB管理
- 解决极光推送Jpush混淆报错问题
- 一段代码让你理解set和list的区别
- 有关ListView的每一行无法点击的问题
- JAVA String.format 方法使用介绍
- 获得网站在百度关键字搜索的排名
- 在 Adobe AIR 中为不同屏幕尺寸的多种设备提供支持
- 数据挖掘:同义词的那些事
- JNI 中文字符串转换乱码的处理
- Andorid之Annotation框架初使用(一)
- linux boa服务器
- Java创建线程数目问题