当项目有复选框

时间:2015-12-10 00:06:28

标签: android android-layout android-recyclerview recycler-adapter

我希望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>

3 个答案:

答案 0 :(得分:8)

在onClick方法中(假设在回调中),请确保在<{1}}之后致电notifyDataSetChanged()

  

notifyDataSetChanged()将与这些默认纹波冲突   的效果。

notifyItemChanged(position)

答案 1 :(得分:1)

我认为你正在寻找涟漪效应。我可以给你基本的想法,只需在drawable&amp;中创建一个xml文件(ripple.xml)。在

中写下这段代码
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item
        android:id="@android:id/mask"
        android:drawable="@android:color/white"
        >

    </item>
</ripple>

&安培;只需在另一个声明了recyclerview元素的xml文件中写两行。

android:background="@drawable/ripple"
android:clickable="true"

就像我的情况一样,我只有TextView,而在父标签中,我正在声明这两行

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/ripple"
    android:clickable="true"
   >

<TextView
    android:id="@+id/textView_Username"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    android:textColor="@color/colorPrimary"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    />
</LinearLayout>

最后结果:enter image description here

观看此视频

https://www.youtube.com/watch?v=qvVkDb7DqCk

答案 2 :(得分:0)

您使用android:background="?android:attr/selectableItemBackground",但应使用android:foreground="?android:attr/selectableItemBackground"