CheckedTextView不响应点击

4
我有一个动态填充CheckedTextView的列表视图。该列表视图设置为多选模式。我使用OnItemClickListener来响应我的列表视图上的点击。同时,我制作了一个带有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>    

我猜这是因为CheckedTextView被放入LinearLayout中,它们无法从ListView的列表项接收到点击事件。
5个回答

1

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


1

我有不同的看法。如果您查看simple_list_item_multiple_choice.xml源代码,您将看到android:checkMark属性设置为?android:attr/listChoiceIndicatorMultiple。这是CheckedTextView在内部使用的内容,用于绘制复选框处于任何状态下的情况,正如您可能从它的源代码中看到的。

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

我错了,你猜对了。似乎自定义ListView的行需要实现Checkable接口,而CheckedTextView实现了该接口,但LinearLayout没有。请参见另一个StackOverflow线程中的this answer以获取详细信息。


0

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

  1. 移除LinearLayout,仅使用CheckedTextView(是的,这是可能的)。因此,布局的主要元素是可选中的,并且将被标记。

  2. 如果您的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>

来源: 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/

相关问题: 在Android中,选定、选中和激活状态有什么区别?


0

这个问题是由于属性 singleLine = true 导致的。如果你删除它或者替换成 maxLines = 1,那么它就能正常工作了。实际上,在你点击该项时会检查状态——我认为这是一个 Android 的 bug。


0

即使它们没有接收到OnClickEvent,您仍然可以使用布尔ArrayList来维护与列表项相同大小的状态。在这里,我刚回答了类似的问题。希望这能给您一个更好的想法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接