我有如下列表视图项目
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants"
>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/music_list_item_checkbox_bg"
/>
</LinearLayout>
music_list_item_checkbox_bg.xml
是一个选择器,它将根据不同的状态显示不同的可绘制对象。
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_pressed="false"
android:state_selected="true"
android:drawable="@drawable/btn_checkbox_check_untapped" />
<item android:state_selected="true"
android:state_pressed="true"
android:drawable="@drawable/btn_checkbox_check_tapped" />
<item android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/btn_checkbox_uncheck_untapped" />
<item android:state_selected="false"
android:state_pressed="true"
android:drawable="@drawable/btn_checkbox_uncheck_tapped" />
</selector>
当我按下列表视图中的项目并将触摸屏留在项目内时,取决于不同状态的可绘制对象是正确的。
问题:但是如果我按下项目并将手指水平移出项目(触摸点的X在项目的顶部和底部之间),然后离开屏幕,复选框的可绘制将保持在状态按下。(如果接触点的 X 不在项目的顶部和底部,则状态为正确)。
我尝试添加android:duplicateParentState="true"
到复选框以获得与父级相同的状态,但它不起作用。
我很困惑,有人有什么想法吗?
已编辑
我之前尝试在项目中实现 onTouch 和 onIntercept,但如果我返回 super.onTouch(MotionEvent 事件),则只能接收动作。只返回true,则接收到sequence event,但是listview的onItemClick不起作用。我尝试阅读 AbsListview 中的 onTouch 代码片段以了解如何解决问题,我发现有时通过调用 child.setPressed(false),child(item) 的按下状态不会清除为 false,这取决于不同的触摸模式。
我真的很想要一个解决方案!!!