我有一个ListView
,其自定义Adapter
继承自ArrayAdapter
。我正在使用Checkable
的自定义LinearLayout
子类来突出显示列表中最后选择的项目,它基本上将已检查状态映射到所选项。
Adapter
用于列表项的布局如下:
<com.wordlistdictionary.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="40dp">
<LinearLayout
android:id="@+id/entry_text"
android:layout_width="0dp"
android:layout_weight="7"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:duplicateParentState="true"
/>
<TextView
android:id="@+id/entry_number_of_occurences_1"
android:textSize="9pt"
android:typeface="monospace"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/item_text_color_selector"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:duplicateParentState="true"
/>
<TextView
android:id="@+id/entry_frequency_1"
android:textSize="9pt"
android:typeface="monospace"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/item_text_color_selector"
android:layout_gravity="center_vertical"
android:layout_weight="2"
android:duplicateParentState="true"/>
<ImageButton
android:id="@+id/delete_entry_button_1"
android:src="@drawable/delete_button_selector"
android:layout_height="40dp"
android:layout_width="40dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="15dp"
android:duplicateParentState="true"
/>
</com.wordlistdictionary.CheckableLinearLayout>
在我添加最后一个ImageButton
视图并且它停止突出显示该点的文本之前,它正如我所期望的那样,最后一个被触摸的项目的文本颜色发生了变化。
有没有人遇到过这个以及你的解决方案是什么?
目前我正在考虑一种解决方法,即从我的自定义布局手动将选定状态传播到所有子视图,而不是仅仅更改布局视图本身的选定状态并依赖duplicateParentState
机制。 / p>
答案 0 :(得分:0)
事实证明,当添加到列表项时,Button
或ImageButton
“吞下”触摸的事件,因此它不会传播到列表视图,因此我必须设置imageButton.setTouchable(false)
在我的自定义getView()
的{{1}}中。
请注意,我首先尝试在布局文件中设置Adapter
,但它不起作用,所以我必须以编程方式设置它。
我在这两个问题中找到了答案:
ListView setOnItemClickListener not working by adding button
Click is not working on the Listitem Listview android