Android Recyclerview多个onclick项目

时间:2015-01-31 18:20:40

标签: android material-design android-recyclerview

我正在尝试使用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或复选框上完成了点击。

我有什么遗失的东西吗?理想情况下,如果某人有一个如何实现这一点的工作示例,那就太棒了。

感谢。

1 个答案:

答案 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