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中子控件的点击事件如何操作!
1.首先明白一点listview条目是不支持子控件的点击事件的,所以这里我们需要自定义条目子控件的点击事件。

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

4319

被折叠的 条评论
为什么被折叠?



