单击 RecyclerView 中选中的项时设置项的状态
Set the state of an item in a RecyclerView selected when click on it
我认为这将非常容易实现,但经过数小时的搜索后我找不到有用的东西来让它工作。
我想在抽屉中设置用户点击的项目,这个列表是一个 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 中的项目?
Remove the onclick listener from view holder.
在 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);
希望这能解决您的问题。
好吧,在进一步挖掘并尝试了解 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>
对于那些将 RecyclerView 与 包含 TextView 的项目一起使用的用户。
这将允许 TextView
获得焦点状态:
android:duplicateParentState="true"
我认为这将非常容易实现,但经过数小时的搜索后我找不到有用的东西来让它工作。 我想在抽屉中设置用户点击的项目,这个列表是一个 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 中的项目?
Remove the onclick listener from view holder.
在 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);
希望这能解决您的问题。
好吧,在进一步挖掘并尝试了解 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>
对于那些将 RecyclerView 与 包含 TextView 的项目一起使用的用户。
这将允许 TextView
获得焦点状态:
android:duplicateParentState="true"