android – 当项目有一个复选框时,RecyclerView项目不显示涟漪/触摸反馈

我希望RecyclerView中的项目在按下时有触摸反馈或涟漪,但它们似乎不起作用,我认为这是因为复选框.

仅在长按时才会显示波纹,但只需按一下即可进行简单的按压.

愿有人帮我解决这个问题吗?提前致谢.

PD:我使用的是ListView,项目布局父级是LinearLayout.涟漪效果很好.移动到RecyclerView后,项目涟漪不起作用.我再次尝试使用LinearLayout,但仍然无法正常工作.

这是布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/requestCard"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:focusable="true"
    android:descendantFocusability="blocksDescendants"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/imgIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
        android:maxHeight="64dp"
        android:maxWidth="64dp"
        android:padding="@dimen/lists_padding"
        android:src="@drawable/ic_launcher"
        tools:ignore="ContentDescription"/>

    <TextView
        android:id="@+id/txtName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toEndOf="@+id/imgIcon"
        android:layout_toRightOf="@+id/imgIcon"
        android:ellipsize="end"
        android:maxLength="@integer/request_text_length"
        android:maxLines="1"
        android:padding="@dimen/lists_padding"
        android:textSize="@dimen/abc_text_size_large_material"
        tools:text="App Name"/>

    <CheckBox
        android:id="@+id/chkSelected"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:clickable="false"
        android:padding="@dimen/lists_padding"/>

</RelativeLayout>
最佳答案
在onClick方法中(假设在回调中),请确保在notifyItemChanged(position)之后不调用notifyDataSetChanged().

notifyDataSetChanged() will conflict with those default ripple
effects.

new recyclerAdapter.ClickListener() {
    @Override
    public void onClick(int position) {

        ... awesome item onClick code ...

        notifyItemChanged(position);
        //notifyDataSetChanged(); <//--- Causes the no ripple bug
    }
};

转载注明原文:android – 当项目有一个复选框时,RecyclerView项目不显示涟漪/触摸反馈 - 代码日志