点击RecyclerView中的一个项目后,设置其状态为已选。

5

我认为这将非常容易实现,但在搜索了数小时后,我没有找到有用的东西来使其工作。 我想要设置选中用户在抽屉中点击的项目,此列表是一个RecyclerView。在我的适配器的ViewHolder中,我有一个onClick事件用于处理项目:

@Override
public void onClick(View v) {
   notifyItemChanged(selectedItem);
   selectedItem = getPosition();
   notifyItemChanged(selectedItem);
}

selectedItem是用来跟踪选定项目的整数。

现在,在onBindViewHolder中,我这样做:

holder.itemView.setSelected(position == selectedItem);

但是似乎选择状态从未被调用,因为我已经将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>

正常状态下工作正常,因此我知道背景已经应用成功。

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

3个回答

2

从视图持有者中移除onclick侦听器。

在onBindViewHolder中做如下操作:

viewHolder.itemView.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            // TODO Auto-generated method stub
            notifyItemChanged(selectedItem);
            selectedItem = position;
            notifyItemChanged(selectedItem);
        }
    });
    holder.itemView.setSelected(position == selectedItem);

我希望这可以解决你的问题。

1
什么都没有,选定的状态也没有显示出来。 - xmarston

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>

0
对于那些使用包含TextView的RecyclerView的人来说,这将允许TextView获取焦点状态:
android:duplicateParentState="true"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接