设置单击 RecyclerView 中选定项目时的状态

xma*_*ton 5 android selecteditem android-recyclerview

我认为这很容易实现,但经过几个小时的搜索后,我找不到有用的东西来让它工作。我想设置用户在抽屉中点击的项目,这个列表是一个RecyclerView。在我的适配器的 ViewHolder 中,我有一个项目的 onClick 事件:

@Override
public void onClick(View v) {
   notifyItemChanged(selectedItem);
   selectedItem = getPosition();
   notifyItemChanged(selectedItem);
}
Run Code Online (Sandbox Code Playgroud)

selectedItem 是一个 int 来跟踪所选项目。

现在在 onBindViewHolder 中我这样做:

holder.itemView.setSelected(position == selectedItem);
Run Code Online (Sandbox Code Playgroud)

但似乎选定的状态从未被调用,因为我将 android:background 设置为具有以下内容的项目行:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@drawable/border_bottom_selected"
        android:color="@color/backgroundToolbar"/>
    <item android:drawable="@drawable/border_bottom" />
</selector>
Run Code Online (Sandbox Code Playgroud)

正常状态正在工作,所以我知道背景应用得很好。

那么,如何将选定状态设置为 RecyclerView 中的项目呢?

xma*_*ton 0

好吧,在深入挖掘并尝试了解 android 从 xml 实现样式的方式之后,我发现要更改特定 TextView 中的文本颜色(我在问题中没有告诉的内容),您必须设置属性android:color="@drawable/bg_item"(bg_item 是包含选择器的文件,并且在每个项目中包含属性 android:color),如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@drawable/border_bottom_selected"
        android:color="@color/backgroundToolbar" />
    <item android:drawable="@drawable/border_bottom"
        android:color="@color/colorTextTitleTab"/>
</selector>
Run Code Online (Sandbox Code Playgroud)