Android RippleDrawable在RecyclerView中未显示正确的状态

Android RippleDrawable在RecyclerView中未显示正确的状态,android,android-recyclerview,rippledrawable,Android,Android Recyclerview,Rippledrawable,我有一个具有不同状态的RippleDrawable,用于在RecyclerView <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/PrimaryBlue"> <it

我有一个具有不同状态的
RippleDrawable
,用于在
RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/PrimaryBlue">
    <item android:id="@android:id/mask">
        <color android:color="@android:color/white" />
    </item>

    <item>
        <selector>
            <item android:state_activated="true">
                <color android:color="@color/HeaderBackgroundGrey"/>
            </item>
            <item android:state_focused="true">
                <color android:color="@color/HeaderBackgroundGrey"/>
            </item>
            <item android:state_active="true">
                <color android:color="@android:color/transparent"/>
            </item>
            <item android:state_selected="true">
                <color android:color="@android:color/transparent"/>
            </item>
            <item android:state_enabled="true">
                <color android:color="@android:color/transparent"/>
            </item>
            <item android:state_checked="true">
                <color android:color="@android:color/transparent"/>
            </item>
            <item android:state_pressed="true">
                <color android:color="@android:color/transparent"/>
            </item>
        </selector>
    </item>
</ripple>
这会将该行更改为我想要的背景色,但列表中的第一项是我的
@color/PrimaryBlue
color。我不知道该项目处于什么状态,因为我认为它将是聚焦状态,但我尝试在选择器中设置它,但它仍然是蓝色的

正如您在这里看到的,“Ethernet”仍然是蓝色,“Display”是用正确的背景选择的。然而,以太网现在应该与“Wifi”的颜色相同

我可以将蓝色从列表中的第一个项目移动的唯一方法是,如果我请求将焦点移动到另一个视图,但蓝色只是移动到我指定焦点的另一个列表项目

我希望在使用鼠标或键盘导航某一行时,蓝色高亮显示该行,然后在选中该项目时,它应显示该行的激活状态颜色,所有其他行应为默认背景色

这是我的行项目布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menu_item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/selected_background"
    android:focusable="true">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/text_margin"/>

</LinearLayout>

我得到了我想要的,但因为我将涟漪设置为透明,所以单击时无法获得涟漪动画

为什么要手动设置激活的涟漪?另外,请粘贴您的适配器代码,以明确您是如何调用/设置的。@Elliptica是的,我将其设置为Activated我没有遇到在实现上述代码时遇到的问题,因此我希望确保我们的代码完全匹配。您能否粘贴完整的适配器,以及在布局中创建回收器的位置,并将其填写到mainActivity中,等等?(另外,我的问题是,为什么要手动设置它--它应该自行设置。您是在遇到共享的问题后还是之前开始手动激活/聚焦它?)@Elliptica哦,对不起,我误读了你的第一个问题,如果你不手动设置视图,该视图将如何激活?我从未见过一行自动激活。这就是说,我在模拟器上而不是在我的设备上尝试了它,看起来这可能是一个特定于设备的问题,因为它在模拟器上没有显示此行为。为什么要手动设置激活的?另外,请粘贴您的适配器代码,以明确您是如何调用/设置的。@Elliptica是的,我将其设置为Activated我没有遇到在实现上述代码时遇到的问题,因此我希望确保我们的代码完全匹配。您能否粘贴完整的适配器,以及在布局中创建回收器的位置,并将其填写到mainActivity中,等等?(另外,我的问题是,为什么要手动设置它--它应该自行设置。您是在遇到共享的问题后还是之前开始手动激活/聚焦它?)@Elliptica哦,对不起,我误读了你的第一个问题,如果你不手动设置视图,该视图将如何激活?我从未见过一行自动激活。也就是说,我在模拟器上而不是在我的设备上尝试了它,看起来这可能是一个特定于设备的问题,因为它在模拟器上没有显示这种行为
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/menu_item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/selected_background"
    android:focusable="true">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/text_margin"/>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@android:color/transparent">
    <item android:id="@android:id/mask">
        <color android:color="@android:color/white" />
    </item>

    <item>
        <selector>
            <item android:state_activated="true">
                <color android:color="@color/HeaderBackgroundGrey"/>
            </item>
            <item android:state_focused="true">
                <color android:color="@color/ListItemBlue"/>
            </item>
            <item android:state_hovered="true">
                <color android:color="@color/ListItemBlue"/>
            </item>
            <item android:state_drag_hovered="true">
                <color android:color="@color/ListItemBlue"/>
            </item>
        </selector>
    </item>
</ripple>
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            val item = values[position]
            holder.title.text = item

            if (lastPosition == position) {
                holder.menu_item.isActivated = true
                holder.menu_item.requestFocus()
            } else {
                holder.menu_item.isActivated = false
            }
        }