【发布时间】:2021-12-15 01:13:25
【问题描述】:
我想在适配器类中的操作模式处于活动状态时突出显示该项目。我可以这样做,但滚动后突出显示状态消失了。我尝试了各种解决方案,但我不明白为什么会这样?
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
class MyViewHolder extends RecyclerView.ViewHolder {
public void bind(Items viewHolder_item) {
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
isSelectMode = true;
if (viewHolder_item.getIsSelect()){
itemView.setBackgroundColor(Color.TRANSPARENT);
item.get(position).setSelect(false);
selectedList.remove(item.get(position));
} else {
itemView.setBackgroundColor(Color.GRAY);
item.get(position).setSelect(true);
selectedList.add(item.get(position));
}
if (selectList.size() == 0){
isSelectMode = false;
}
return true;
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isSelectMode){
if (viewHolder_item.getIsSelect()){
itemView.setBackgroundColor(Color.TRANSPARENT);
item.get(position).setSelect(false);
selectedList.remove(item.get(position));
} else {
itemView.setBackgroundColor(Color.GRAY);
item.get(position).setSelect(true);
selectedList.add(item.get(position));
}
if (selectList.size() == 0){
isSelectMode = false;
}
}
}
});
}
无论实施哪种解决方案,结果总是相同的。滚动后突出显示的颜色消失了。任何帮助将不胜感激。
【问题讨论】:
-
在您的代码中,您可以同时使用 backgroundColor 和 backgroundResource。尝试只使用一个。同样在 onBindViewHolder 而不是调用 getadapterposition() 您可以简单地使用方法提供的位置
-
感谢您的回答,但即使进行了这些更改,结果也是一样的。
-
我在问题上方也进行了编辑,以向您展示实现。
-
在 onBindViewHolder 方法的第一个 if 语句中添加 Log.d() 以查看 contains 子句是否正常工作,即找出错误是否发生在绑定或设置红色时
-
我在 if 块中添加了
Log.e("TAG", " contains " + selectedList.contains(items.get(position)));,如上所示。即使您突出显示一个项目并向上滚动,它也总是返回 false。
标签: android android-recyclerview highlight