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

Jah*_*iva 6 android android-layout recycler-adapter 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>
Run Code Online (Sandbox Code Playgroud)

Cod*_*sed 8

在你的onClick方法(在你的回调假设),确保你notifyDataSetChanged()notifyItemChanged(position).

notifyDataSetChanged()将与那些默认的涟漪效应冲突.

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

        ... awesome item onClick code ...

        notifyItemChanged(position);
        //notifyDataSetChanged(); <//--- Causes the no ripple bug
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 如果我必须在单击项目时更新其他可见项目,我该怎么办? (2认同)