怎样解决ListView条目中的Button事件

本文主要探讨ListView条目中Button事件监听的问题和事件冲突处理。当子项包含Button时,会导致条目点击无效。解决方法是在根布局设置`android:descendantFocusability`属性为`blocksDescendants`。同时,文章提到了ListView中获取view对象的注意事项,建议使用`LayoutInflater.inflate()`的第二种形式。最后,介绍了如何自定义条目子控件的点击事件,通过实现`View.OnClickListener`并在`getView()`中设置。
摘要由CSDN通过智能技术生成

ListView条目中的button事件的监听以及子控件与父控件的事件冲突处理

1.事件冲突处理

listview的条目中当子项包括Button或者CheckBoX等控件时,点击条目无效。这里是因为Button或者CheckBoX将条目上的焦点抢走了。
解决方法:在listview条目的 根布局 中加 上

android:descendantFocusability="blocksDescendants"

android:descendantFocusability
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。

属性的值有三种:

    beforeDescendants:viewgroup会优先其子类控件而获取到焦点

    afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

    blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

一般我们会选择第三种。
好了就这样冲突问题就解决了;

ListView中获取view对象注意的问题;

只讲一点关于getview()方法中怎样获得视图对象的;
LayoutInflater view = LayoutInflater.from(mContext);
1. convertView = view.inflate(R.layout.item_list, null);
2. convertView = view.inflate(R.layout.item_list, parent, false);
这里许多人为了简便喜欢用第一种表达式,但其实通过下面的源码我们知道,

    public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) {
        return inflate(resource, root, root != null);
    }

方法1最终会调用方法2.所以以后书写的过程中最好是直接调用后者

下面正式进入主题--ListView中子控件的点击事件如何操作ÿ

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值