首页 > 解决方案 > 无法使用选择器突出显示 RecyclerView 中的项目

问题描述

当我按下它时,我只想突出显示项目。

我在下面有选择器(@drawable/expandable_menu)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">
<item android:drawable="@color/purple_200" android:state_pressed="true" />
<item android:drawable="@color/purple_500" android:state_selected="true" />
<item android:drawable="@color/chat" android:state_activated="true" />
<item android:drawable="@color/transparent"/>
</selector>

在我的 onclick 监听器中,我选择了这个项目

回收站视图 XML:

<androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="70dp"
        android:id="@+id/chat_messages"
        app:stackFromEnd="true"
        android:clickable="true"
        android:focusableInTouchMode="true"
        android:background="@drawable/expandable_menu"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        android:focusable="true">

消息 XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="10dp"
android:layout_gravity="left"
>

<TextView
    android:id="@+id/chat_msg_send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="this is me"
    android:textColor="@color/black"
    android:textSize="16dp"
    android:background="@color/cardview_shadow_start_color"
    android:padding="10dp"
    android:layout_alignParentTop="true" />
 </RelativeLayout>

我遵循了这个答案(https://stackoverflow.com/a/30046476)但没有成功

标签: androidxmlandroid-recyclerview

解决方案


您必须设置OnClickListenerView,将选择器设置为背景。我看到您为TextView(child) 设置了选择器,您是在将 onClick 设置为此View还是为整体itemView(在您的情况下是 root RelativeLayout)?

您也可以尝试添加- 当父按下时android:duplicateParentStateTextView这应该使TextView绘制按下状态,而不仅仅是它本身(当没有设置TextView时,它根本不可点击)OnClickListener


推荐阅读