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)
在你的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)