1. 概述
在开发过程中,显示 listview 列表数据中时,如果 listview的item的控件含有 textview、CheckBox、Button、ImageButton等本身带有click等事件的View,这个时候,点击 ListView时,setOnItemClickListener可能会失效:
2. 原因与解决方案
1>:原因如下:
此时 在item 区域中,event(事件)的焦点被内部 View抢占了,也就是说只有 内部的View的click事件有效,而item的事件无法被触发,所以导致 点击listview的 item 时,不能响应点击事件;
2>:解决方法如下:
在 item的根布局中添加如下属性即可:
android:descendantFocusability="blocksDescendants",表示 ViewGroup会覆盖子类控件而直接获取焦点;
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rl_commodity"
android:background="@drawable/bg_shape_select_car"
android:elevation="@dimen/px10"
android:padding="@dimen/px20"
android:layout_marginLeft="@dimen/px30"
android:layout_marginRight="@dimen/px30"
android:layout_marginTop="@dimen/px30"
android:layout_marginBottom="@dimen/px20"
android:descendantFocusability="blocksDescendants"
>
<CheckBox
android:id="@+id/ck_chose"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:button="@drawable/check_box_style"
android:scaleX="0.4"
android:scaleY="0.4" />
<cn.uploo.yhh.view.CircleImageView
android:id="@+id/iv_show_pic"
android:layout_width="@dimen/px80"
android:layout_height="@dimen/px80"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/ck_chose"
android:src="@mipmap/test_1"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="15dp"
android:layout_toRightOf="@id/iv_show_pic"
android:orientation="vertical"
android:id="@+id/ll_1"
>
<cn.uploo.yhh.view.CustomTextView
android:id="@+id/tv_commodity_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="酒红色纯红色纯羊毛西服套装"
android:textColor="@color/black"
android:textSize="14sp"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="invisible"
>
<cn.uploo.yhh.view.CustomTextView
android:id="@+id/tv_commodity_attr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="属性:粉蓝色"
android:textSize="14sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:orientation="horizontal">
<cn.uploo.yhh.view.CustomTextView
android:id="@+id/tv_commodity_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="¥390"
android:textColor="@color/red"
android:textSize="14sp"
/>
<cn.uploo.yhh.view.CustomTextView
android:id="@+id/tv_commodity_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="x1"
android:textColor="@color/gray"
android:visibility="invisible"
/>
<LinearLayout
android:id="@+id/rl_edit"
android:layout_width="120dp"
android:background="@color/qianhui"
android:layout_height="30dp"
android:layout_marginLeft="20dp"
android:layout_marginBottom="@dimen/px20"
>
<TextView
android:id="@+id/iv_sub"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:textColor="@color/black"
android:background="@color/white_c"
android:layout_margin="1dp"
android:layout_height="match_parent"
android:text=" - " />
<TextView
android:id="@+id/tv_commodity_show_num"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:background="@color/white_c"
android:layout_margin="1dp"
android:layout_height="match_parent"
android:text="1"
android:textSize="@dimen/text_32"
/>
<TextView
android:id="@+id/iv_add"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:background="@color/white_c"
android:layout_margin="1dp"
android:layout_height="match_parent"
android:text=" + " />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/tv_commodity_delete"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@mipmap/icon_delete"
android:gravity="center"
android:layout_margin="5dp"
android:visibility="gone" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="@dimen/px1"
android:layout_below="@id/rl_commodity"
android:background="@color/bg_hui"
android:layout_marginTop="@dimen/px20"
/>
</RelativeLayout>