我有一个使用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事件。
答案 0 :(得分:1)
我猜不同。如果您查看source code of simple_list_item_multiple_choice.xml
,则会看到android:checkMark
属性设置为?android:attr/listChoiceIndicatorMultiple
。这是CheckedTextView
内部用于在任何状态下绘制复选框的内容,正如您可以从its source code看到的那样。
但是布局中 CheckedTextView
的定义缺少此属性。我应该责怪,而不是在CheckedTextView
元素中使用LinearLayout
。
我错了你猜对了。自定义ListView
的行似乎需要实现Checkable
,CheckedTextView
但LinearLayout
没有。有关详细信息,请参阅另一个StackOverflow线程中的this answer。
答案 1 :(得分:1)
我遇到了同样的问题,所以我将布局更改为android.R.layout.simple_list_item_multiple_choice,而不是使用带CheckedTextView的自定义布局。
答案 2 :(得分:0)
即使他们没有收到OnClickEvent,你也可以使用相同大小的List Items的布尔ArrayList来维护这些复选框的状态。 Here, 我刚刚回答了类似的问题。我希望它会给你一个更好的主意。
答案 3 :(得分:0)
这个问题有两个简单的解决方案:
删除LinearLayout和仅用户CheckedTextView(是的,可以)。因此布局的主要元素是可检查的,并且将被标记。
如果您的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/
相关问题:What is the difference between the states selected, checked and activated in Android?
答案 4 :(得分:0)
此问题是由attr singleLine = true
引起的。如果您删除此项或替换为maxLines = 1
,它将正常工作。实际上,当您点击该项目时会检查状态 - 我认为这是一个Android错误。