CheckedTextView不响应click

时间:2011-10-18 12:09:48

标签: android android-layout checked checkedtextview

我有一个使用CheckedTextViews动态填充的列表视图。列表视图设置为多选模式。我正在使用OnItemClickListener来响应listview上的点击。我还用CheckedTextView的布局制作了一个XML文件(实际上它只是标准android.R.layout.simple_list_item_multiple_choice的副本)。所以在这种情况下一切正常:当我点击列表视图中的项目时,将检查相应的checkedtextview。但是当我尝试使用以下布局时,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>    

我猜是因为CheckedTextViews被放入LinearLayout并且它们没有从Listview的列表项中收到click事件。

5 个答案:

答案 0 :(得分:1)

我猜不同。如果您查看source code of simple_list_item_multiple_choice.xml,则会看到android:checkMark属性设置为?android:attr/listChoiceIndicatorMultiple。这是CheckedTextView内部用于在任何状态下绘制复选框的内容,正如您可以从its source code看到的那样。

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

我错了你猜对了。自定义ListView的行似乎需要实现CheckableCheckedTextViewLinearLayout没有。有关详细信息,请参阅另一个StackOverflow线程中的this answer

答案 1 :(得分:1)

我遇到了同样的问题,所以我将布局更改为android.R.layout.simple_list_item_multiple_choice,而不是使用带CheckedTextView的自定义布局。

答案 2 :(得分:0)

即使他们没有收到OnClickEvent,你也可以使用相同大小的List Items的布尔ArrayList来维护这些复选框的状态。 Here, 我刚刚回答了类似的问题。我希望它会给你一个更好的主意。

答案 3 :(得分:0)

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

  1. 删除LinearLayout和仅用户CheckedTextView(是的,可以)。因此布局的主要元素是可检查的,并且将被标记。

  2. 如果您的minSDK是上述11,请自定义android:checkMarke并将状态设置为Activated。这是一个例子:

  3. 示例代码:

    <?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>
    

    来源:http://www.jiahaoliuliu.com/2013/08/customizing-checkbox-in-android.html

    中级解决方案是自定义列表视图的onItemClickListener,如下面的代码所示: https://github.com/jiahaoliuliu/CustomizedListRow

    艰难但正确的解决方案是MarvinLab提出的解决方案: http://www.marvinlabs.com/2010/10/29/custom-listview-ability-check-items/

    相关问题:What is the difference between the states selected, checked and activated in Android?

答案 4 :(得分:0)

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