Listview onitemclicklistener不适用于复选框?

时间:2015-04-28 12:33:45

标签: android listview checkbox

我有一个列表视图,其元素如下所示,包含一个复选框

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/white"
android:orientation="vertical"
android:layout_height="wrap_content">

<RelativeLayout
    android:layout_width="match_parent"
    android:minHeight="64dp"
    android:layout_marginRight="8dp"
    android:layout_marginLeft="8dp"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/imageViewVoucherIcon"
        android:layout_width="50dp"
        android:layout_centerVertical="true"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/textViewVoucherText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:layout_toLeftOf="@+id/checkboxVoucherClick"
        android:layout_centerVertical="true"
        android:layout_marginLeft="8dp"
        android:textColor="@color/text"
        android:text="sas"
        android:layout_toRightOf="@+id/imageViewVoucherIcon" />

    <CheckBox
        android:id="@+id/checkboxVoucherClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/seperator" />
</LinearLayout>

这是我的onitem点击监听器

 lvVoucher.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)  {
           CheckBox cb=(CheckBox)view.findViewById(R.id.checkboxVoucherClick);
            if(cb.isChecked())
            {
                Log.e("check","true");
            }else{
                Log.e("check","false");
            }
        }
    });

但它不会返回任何东西。

4 个答案:

答案 0 :(得分:2)

将焦点移至布局中的复选框,然后它将起作用。

像这样:

<CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:focusable="false"
        android:focusableInTouchMode="false"/>

否则你必须在适配器本身编写该监听器。

答案 1 :(得分:1)

我有同样的问题,这对我有用;

为您的复选框设置以下属性:

      android:focusable="false"
      android:focusableInTouchMode="false"

答案 2 :(得分:0)

您必须在xml父布局中添加一个新行 -

android:descendantFocusability="blocksDescendants"

因此,您的更新后的观点将如下所示 -

   <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@color/white"
    android:orientation="vertical"
    android:descendantFocusability="blocksDescendants"
    android:layout_height="wrap_content">

它一定会对你有用。

答案 3 :(得分:0)

getView

中工作
 holder.checkbox.setOnClickListener( new View.OnClickListener() {  
 public void onClick(View v) {  
  CheckBox cb = (CheckBox) v ;  
  Toast.makeText(getApplicationContext(),
   "Clicked on Checkbox: " + cb.getText() +
   " is " + cb.isChecked(), 
   Toast.LENGTH_LONG).show();
 }  
});