zoukankan      html  css  js  c++  java
  • 关于listView的item失去焦点不能点击 Item中包含Button 导致抢占焦点

    今天发现一个问题。listView的item点击以后进入到下一个页面,下个页面有个返回按钮,直接返回回去以后点击事件不能触发,滑动或者重新打开这个listView,就可以达到原来的效果。后来发现是因为所在的整个页面失去焦点。

    解决的基本思想就是返回的时候让view重新的获取焦点。android自带了一个方法requestFocusFromTouch。在返回的时候用对应的view来调用这个方法即可。如果是在Activity中的话则写在onresume()中就可以了。

    还有一总情况,如果listView的adapter中不只是简单的文字显示,比如说还有ImageButton,那么ImageButton会抢掉listView的item的焦点。导致item不能获取到焦点。因为自定义ListViewItem有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法,然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendants”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,不需要针对Item Layout中的每一个控件重新设置focusable属性了,如此就可以顺利的响应onItemClickListener中的onItemClick()方法了。

    所以总结一下,最简单的解决方法就是在ListView的Item选项的布局文件根上加上android:descendantFocusability=”blocksDescendants”就可以了。

  • 相关阅读:
    css属性选择器
    css各浏览器的兼容性写法
    使元素的宽度由内容撑开的方法
    DOM应用
    css圣杯布局、等高布局
    总结css兼容问题
    table注意事项
    相对定位、绝对定位在IE6的问题
    IE6,7下li标签的间隙
    清除浮动的7种方法
  • 原文地址:https://www.cnblogs.com/daxin/p/3519824.html
Copyright © 2011-2022 走看看