ListView中包含Button情况下焦点事件的获取

来源:互联网 发布:人工智能伏羲觉醒种子 编辑:程序博客网 时间:2024/05/17 05:59

开发中很常见的一个问题,项目中的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.

android:descendantFocusability

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

属性的值有三种:

    beforeDescendants:viewgroup会优先其子类控件而获取到焦点    afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点    blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性
例子如下

< RelativeLayout  xmlns:android= "http://schemas.android.com/apk/res/android"   android:layout_width= "fill_parent"   android:layout_height= "wrap_content"   android:padding= "5dip"   android:descendantFocusability= "blocksDescendants" >   <ImageView     android:id= "@+id/ItemImage"     android:layout_width= "wrap_content"     android:layout_height= "wrap_content"     android:padding= "5dip"/>   <!--把按钮背景设置为透明:android:background="#00000000" -->   <!--把按钮背景设置为半透明:android:background="#e0000000"-->   < ImageButton      android:id= "@+id/ItemCloseWin"      android:layout_alignParentRight= "true"      android:layout_alignTop= "@+id/ItemWinName"      android:layout_alignBottom= "@+id/ItemWinName"      android:layout_width= "wrap_content"      android:layout_height= "wrap_content"     android:background= "#e0000000"      android:gravity= "left|center_vertical"      android:focusable= "false"      android:src= "@android:drawable/ic_menu_close_clear_cancel" />   <TextView       android:id= "@+id/ItemWinName"       android:layout_toRightOf= "@+id/ItemImage"       android:layout_toLeftOf= "@+id/ItemCloseWin"       android:layout_alignTop= "@+id/ItemImage"       android:layout_alignBottom= "@+id/ItemImage"       android:layout_width= "wrap_content"       android:layout_height= "wrap_content"       android:gravity= "left|center_vertical"       android:textSize= "20dip"       android:text= "title" /> < / RelativeLayout>
0 0
原创粉丝点击