开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。
这时候就可以使用descendantFocusability来解决啦,API描述如下:
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。心得:遇到不会不懂的地方除了网上查询资料之外,也可以多多去尝试每种属性的作用,多阅读官方文档(我始终觉得还是读原文的比翻译的理解的会更好)。
相关推荐
android descendantFocusability用法简析
开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点
按照网上说的通常是在ListView的Item布局中给Button加 android:focusable="false"在Item根布局加android:descendantFocusability="blocksDescendants" 。这样做之后item确实可以点击了,但又会出现另外一个问题 点击...
# ShopCart 案例 ## 截图 ![购物车](screenshots/shopcart.png) ... * recycleview 添加 android:descendantFocusability="beforeDescendants";activity 添加 android:windowSoftInputMode="stateHidden|adjust
android:descendantFocusability="blocksDescendants"这句,并固定listview的高度属性(如:android:layout_height="220dp")。覆盖住scrollview的焦点,使scrollview不能滑动,listview可以滑动,并确保listview的...
前言 最近在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题。我的情况是在item中有一...2、在item最外层添加属性 android:descendantFocusability=”blocksDesce
1 准备图片 2写布局 3 写item布局 建立item.xml (注意添加android:descendantFocusability="blocksDescendants"属性) 4映射布局变量 5初始化listview 6点击下拉按钮事件处理 7下拉列表点击处理
假如listview的item中有Button,ImageButton,CheckBox等会强制获取焦点的view 此时,listview的item无法获取焦点,从而无法被点击 解决方法:给item的根布局增加以下属性 Android:descendantFocusability=...
这里有一个大坑,我的viewGroup中有一个这个属性android:descendantFocusability=”blocksDescendants” 开始没有注意到,试了好多方法都不行,后来才看到这个属性,顺便科普一下,这个属性有三个值~ ...
android:descendantFocusability=“blocksDescendants” 防止主控件无法响应点击 android:focusable=“false” 防止子控件,例如按钮无响应 3. 首先,获取需要加载的布局文件order.xml, 这里采用的是LayoutInflater,...
Item xml 根节点添加 android:descendantFocusability=”blocksDescendants” Button 设置 android:focusable=”false” 这样点击Button 和ListView Item 可以分别响应自己的点击事件 开发中很常见的一个问题,项目...
因为自带的listView不能满足项目需求,通过实现自己的Adapter去继承...在item的根目录加入android:descendantFocusability=”blocksDescendants” <?xml version=1.0 encoding=utf-8?> <LinearLayout
通过lv.setSingle(false);设置是单选还是多选 List<TreeElement> treeElements = parser.getTreeElements_system(listSystemInfo, 1, true);...android:descendantFocusability="blocksDescendants" 解决焦点问题。
总体是垂直的线性布局,并且需要加上android:descendantFocusability=”blocksDescendants”来夺取焦点 主要为了实现点击list内的每一项以及点击按钮都有不同的反应 里面放一个textview做标题,一个listview即可 bg....
android:descendantFocusability=”afterDescendants” <ScrollView nandroid:id=@+id/scroll_content android:layout_width px android:layout_height=600.0px android:layout_x px android:layout_y=258.0px> &...
Android:clickable=true,之后导致item点击事件失效,对根布局设置android:descendantFocusability=blocksDescendants“,以及对checkbox设置android:focusable=false都不会起作用,所以item根布局不要设置android:...
问题 在Android开发中,遇到一个问题,是...android:descendantFocusability=blocksDescendants 2.在Adapter中添加 holder.mGridView.setClickable(false); holder.mGridView.setPressed(false); holder.mGridView.s
完美解决了ListView和CheckBox的焦点冲突及CheckBox的复用问题,讲解了CheckBox的全选、反选、删除功能及在下拉刷新和下拉加载中如何保存CheckBox的先前的选中状态
如果listitem里面包括button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最常用的解决办法是在listitem的布局文件中设置descendantFocusability属性。 item的布局文件: <?xml ...