Adapter(17)如何只让item响应事件及如何屏蔽item整体的事件
1,控制onitemclick事件的响应
转自: http://blog.csdn.net/top_code/article/details/16826539
今天做开发的时候突然发现ListView onItemclick 点击事件一直无响应,我先给item中的一个ImageButton设置了一个点击事件,但是再给listview设置onItemclick事件时却没有反应。原来是ImageButton 抢走了焦点事件,最后终于找到解决方法:
在item的layout文件根节点添加:android:descendantFocusability="blocksDescendants"
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:descendantFocusability="blocksDescendants" 6 android:orientation="vertical"> 7 8 <LinearLayout 9 android:id="@+id/sort_key_layout" 10 android:layout_width="fill_parent" 11 android:layout_height="25dp" 12 android:background="@color/yuloret9_gray_white" 13 android:orientation="vertical" 14 android:visibility="gone"> 15 16 <View 17 android:layout_width="match_parent" 18 android:layout_height="0.5dp" 19 android:background="@color/yuloret9_gray" /> 20 21 <TextView 22 android:id="@+id/tv_sort_key" 23 android:layout_width="wrap_content" 24 android:layout_height="0dp" 25 android:layout_gravity="center_vertical" 26 android:layout_marginLeft="10dip" 27 android:layout_weight="1" 28 android:gravity="center_vertical" 29 android:text="@string/yuloret9_btn_dialyellow_page" 30 android:textColor="@color/yuloret9_black" 31 android:textSize="13sp" /> 32 33 <View 34 android:layout_width="match_parent" 35 android:layout_height="0.5dp" 36 android:background="@color/yuloret9_gray" /> 37 </LinearLayout> 38 39 <RelativeLayout 40 android:layout_width="match_parent" 41 android:layout_height="wrap_content"> 42 43 <TextView 44 android:id="@+id/tv_callName" 45 android:layout_width="match_parent" 46 android:layout_height="wrap_content" 47 android:layout_marginLeft="10dp" 48 android:layout_marginTop="10dp" 49 android:layout_toLeftOf="@+id/ib_see_detail" 50 android:singleLine="true" 51 android:text="中国银行" 52 android:textColor="@color/yuloret9_black" 53 android:textSize="18sp" /> 54 55 <TextView 56 android:id="@+id/tv_callNumber" 57 android:layout_width="wrap_content" 58 android:layout_height="wrap_content" 59 android:layout_below="@id/tv_callName" 60 android:layout_marginLeft="10dp" 61 android:layout_marginTop="5dp" 62 android:paddingBottom="10dp" 63 android:text="182666" 64 android:textColor="@color/yuloret9_list_tel_font_color" 65 android:textSize="13sp" /> 66 67 <TextView 68 android:id="@+id/tv_callTime" 69 android:layout_width="wrap_content" 70 android:layout_height="wrap_content" 71 android:layout_below="@id/tv_callName" 72 android:layout_marginLeft="5dp" 73 android:layout_marginTop="5dp" 74 android:layout_toRightOf="@id/tv_callNumber" 75 android:paddingBottom="10dp" 76 android:text="昨天13:11" 77 android:textColor="@color/yuloret9_list_tel_font_color" 78 android:textSize="13sp" /> 79 80 <ImageView 81 android:id="@+id/iv_callType" 82 android:layout_width="wrap_content" 83 android:layout_height="wrap_content" 84 android:layout_below="@id/tv_callName" 85 android:layout_marginLeft="5dp" 86 android:layout_marginTop="5dp" 87 android:layout_toRightOf="@id/tv_callTime" 88 android:contentDescription="@string/yuloret9_app_name" 89 android:src="@drawable/yuloret9_ic_calllog_incomming" /> 90 91 <ImageButton 92 android:id="@+id/ib_see_detail" 93 android:layout_width="40dp" 94 android:layout_height="40dp" 95 android:layout_alignParentRight="true" 96 android:layout_centerVertical="true" 97 android:layout_marginRight="10dp" 98 android:background="@null" 99 android:contentDescription="@string/yuloret9_app_name" 100 android:scaleType="centerInside" 101 android:src="@drawable/yuloret9_carrow" /> 102 </RelativeLayout> 103 104 </LinearLayout>
我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendants”即可,这样Item Layout就屏蔽了所有子控件获取Focus的权限,如此就可以顺利的响应onItemClickListener中的onItemClick()方法了。
更多 android:descendantFocusability的作用:viewgroup与其上面view的焦点控制,如何让子view失去焦点等。
2,屏蔽item整体的事件
listView.setItemsCanFocus(true); //设置item项的子控件能够获得焦点(默认为false,即默认item上的子控件是不能获得焦点的)。
当点击item时,整个item响应一个事件,浅蓝色的背景,如果想屏蔽item整体的事件,而让item上的某个控件响应事件,可以让item的根布局加入:
android:focusable="true"
或者:
android:focusableInTouchMode="true" //控件在Touch模式下可以得到焦点
或者它们全部。
也可以让item根布局的某个具体的控件加上上面属性。
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="horizontal" 4 android:layout_width="match_parent" 5 android:layout_height="wrap_content" 6 > 7 <TextView 8 android:layout_width="wrap_content" 9 android:layout_height="wrap_content" 10 android:background="@drawable/ebn" 11 android:id="@+id/lPortrait" 12 /> 13 14 <TextView 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:text="msg content" 18 android:textAllCaps="false" 19 android:background="@drawable/msgbg_state" 20 android:id="@+id/msg_content" 21 android:gravity="top|left" 22 android:paddingTop="2dp" 23 android:focusable="true" 24 android:focusableInTouchMode="true" 25 android:layout_gravity="center_vertical" /> 26 27 28 <TextView 29 android:layout_width="wrap_content" 30 android:layout_height="wrap_content" 31 android:background="@drawable/efq" 32 android:id="@+id/rPortrait" 33 /> 34 </LinearLayout>

浙公网安备 33010602011771号