点击ListView的setOnItemClickListener失效

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>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容