Android CheckedTextView没有';我对点击没有反应

Android CheckedTextView没有';我对点击没有反应,android,android-layout,checked,checkedtextview,Android,Android Layout,Checked,Checkedtextview,我有一个动态填充CheckedTextView的listview。listview设置为多选模式。我正在使用McClickListener响应listview上的单击。此外,我还制作了一个带有CheckedTextView布局的XML文件(实际上它只是标准android.R.layout.simple\u list\u item\u multiple\u选项的副本)。因此,在这种情况下,一切正常:当我在listview中单击一个项目时,相应的checkedtextview变为checked。但是

我有一个动态填充CheckedTextView的listview。listview设置为多选模式。我正在使用McClickListener响应listview上的单击。此外,我还制作了一个带有CheckedTextView布局的XML文件(实际上它只是标准android.R.layout.simple\u list\u item\u multiple\u选项的副本)。因此,在这种情况下,一切正常:当我在listview中单击一个项目时,相应的checkedtextview变为checked。但是当我尝试使用以下布局时,checkedtextview不会响应单击,并且仍然未选中

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll"
    android:layout_height="wrap_content"   
    android:layout_width="wrap_content"  
    android:orientation="vertical"  
    android:padding="5px">
    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        android:layout_width="fill_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:gravity="center_vertical"
        android:drawableLeft="@drawable/checkbox_selector"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"
        android:background="#00ffffff"
        android:textSize="15sp"
        android:singleLine="true"/>
</LinearLayout>    


我猜这是因为CheckedTextView被放在LinearLayout中,它们没有从Listview的列表项接收到click事件。

即使它们没有接收到OnClick事件,也可以使用相同大小的列表项的布尔ArrayList来维护这些复选框的状态。我刚刚回答了类似的问题。我希望它能给你一个更好的主意。

我想不一样。如果查看,您将看到一个
android:checkMark
属性设置为
?android:attr/listcooiceindicator multiple
。这是
CheckedTextView
内部用来绘制处于任何状态的复选框的内容,您可以从中看到

但是布局中的
CheckedTextView
的定义缺少此属性。我会责怪这一点,而不是在
LinearLayout
元素中使用
CheckedTextView


我错了,你猜对了。似乎自定义
列表视图的行
需要实现
可检查的
,而
已检查的文本视图
需要实现,但
线性布局
不需要。有关详细信息,请参见另一个StackOverflow线程。

我也遇到了同样的问题,因此我将布局更改为android.R.layout.simple\u list\u item\u multiple\u选项,而不是使用带有CheckedTextView的自定义布局。

此问题有两个简单的解决方案:

  • 删除LinearLayout和仅限用户选中的TextView(是,这是可能的)。因此,布局的主要元素是可检查的,它将被标记

  • 如果您的minSDK为11或以上,请自定义android:checkMarke并将状态设置为Activated。以下是一个例子:

  • 示例代码:

    <?xml version="1.0" encoding="utf-8"?>
    <selector  xmlns:android="http://schemas.android.com/apk/res/android" >
       <item android:state_activated="true" android:drawable="@drawable/checkbox_selected"/>  
       <item android:state_activated="false" android:drawable="@drawable/checkbox_deselected" />  
       <item android:state_checked="false" android:drawable="@drawable/checkbox_deselected" />  
       <item android:state_checked="true" android:drawable="@drawable/checkbox_selected" /> 
    </selector>
    
    
    
    资料来源:

    中间层解决方案是自定义列表视图的侦听器,如以下代码所示:

    MarvinLab提出了一个艰难但正确的解决方案:


    相关问题:

    此问题是由attr
    singleLine=true
    引起的。如果删除此项或替换为
    maxLines=1
    ,它将正常工作。事实上,当你点击这个项目时,状态会被检查——我认为这是一个Android错误