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>

 



 

posted @ 2015-07-01 21:42  f9q  阅读(428)  评论(0)    收藏  举报