繁体   English   中英

CheckedTextView不响应点击

[英]CheckedTextView doesn't respond to click

我有一个用CheckedTextViews动态填充的列表视图。 列表视图设置为多选模式。 我正在使用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>    

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

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

我猜是不同的。 如果您查看simple_list_item_multiple_choice.xml源代码 ,则会看到android:checkMark属性设置为?android:attr/listChoiceIndicatorMultiple 这就是CheckedTextView内部用来以任何状态绘制复选框的方式,您可能可以从其源代码中看到

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

我错了,你猜对了。 看来,自定义行ListView需要实现Checkable ,这CheckedTextView做,但LinearLayout没有。 有关详细信息,请参见另一个StackOverflow线程中的此答案

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

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

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

示例代码:

<?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中选择,检查和激活的状态之间有什么区别?

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

好吧,即使它们没有收到OnClickEvent,您也可以使用相同大小的列表项的布尔ArrayList来维护这些复选框的状态。 在这里,我只是想这样。 我希望它能给您一个更好的主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM