单击时选择的RecyclerView中的项目状态

时间:2015-04-17 09:17:07

标签: android android-recyclerview selecteditem

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

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

selectedItem是一个用于跟踪所选项目的int。

现在在onBindViewHolder中我这样做:

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

但似乎所选状态从未被调用,因为我有一个android:background用这个内容装入items行:

<?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中的项目?

2 个答案:

答案 0 :(得分: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 :(得分: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>