android_ListView条目点击没有效果的解决方案

ListView条目点击没有效果的解决方案

分析无法响应的原因

首先明白为什么点击没有响应?点击我们就联想到点击事件,一个点击事件能响应在于ACTION_UP事件会被响应,如此说来item点击没有响应我猜测就是ACTION_UP没有被响应到,于是我们去翻翻ListView源码看看:ListView相应Action_up事件的源码

private void onTouchUp(MotionEvent ev) {
    switch (mTouchMode) {
          ...
          if (inList && !child.hasFocusable()) {
                 if (mPerformClick == null) {
                      mPerformClick = new PerformClick();
                 }
           }
           ...
     }
}      

结论:由上面代码可以看到若是孩子具有焦点,那么item是不会相应点击事件的,所以才会出现这种点击响应的效果。

解决方案一:

给具有焦点的控件设置focusable=false,这样ListView的孩子就布局布局有焦点的孩子了,因此就可以相应点击事件了。

解决方案二:

给item的根布局设置android:descendantFocusability属性,下面来看看这几个属性的解释:
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:

  • beforeDescendants:viewgroup会优先其子类控件而获取到焦点
  • afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
  • blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点,我们一般选择blocksDescendants属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,259评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,872评论 0 17
  • ListView 特殊属性 & 常见问题 这里向大家介绍一些我个人认为比较 特别的属性,通过设置这样的属性可以做出...
    OCNYang阅读 7,586评论 1 30
  • 今天做会话练习的时候听到了这么个问题:あなたのうちから空港までどうやって行きますか。乖乖地写上了 农讲所で1番線に...
    GSES94阅读 1,805评论 1 0
  • 记得几月几号 我们遇到 时间它不说话 焉能变老 记得那块黑板 讲台熟悉的微笑 记得那个操场 汗水的味道 还记得那条...
    麻花可乐阅读 2,405评论 0 0

友情链接更多精彩内容