我正在尝试使用recyclelerview,其中每个项目都是简单的TextView + Checkbox
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/title"
android:layout_width="0dp"
android:layout_weight="5"
android:layout_height="wrap_content"
/>
<CheckBox
android:id="@+id/chk"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout>
我想要实现的是(un)选中复选框,如果单击它。但是如果单击了textview,则在整个项目上执行波纹动画并开始片段转换。
我在网上找不到一个例子,我找到的最接近的是RecyclerView onClick
我设法让onclick在代码
中运行@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildPosition(childView));
return true;
}
return false;
}
我遇到的问题是返回的childView是linearlayout而不是textview或复选框。因此,我无法确定是否在textview或复选框上完成了点击。
我有什么遗失的东西吗?理想情况下,如果某人有一个如何实现这一点的工作示例,那就太棒了。
感谢。
答案 0 :(得分:2)
你走了:
您的列表项xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="?attr/selectableItemBackground"
android:layout_height="72dp">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:text="My Text"
android:layout_gravity="left|center_vertical"
android:paddingLeft="16dp"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:layout_gravity="right|center_vertical" />
(我已经使用了FrameLayout
作为root用户,但LinearLayout
应该可以正常工作。)
在Adapter
的{{1}}中使用类似的内容:
RecyclerView