【发布时间】:2021-10-15 12:49:03
【问题描述】:
我在 recylerview 中有一个项目列表。我在点击时突出显示项目,但问题是当我滚动时这些项目的突出显示状态会丢失。我环顾了很多解决方案,但问题仍然存在。当您在滚动后单击这些项目时,列表的大小会减小,因为它应该只有高亮状态消失。
public void onBindViewHolder (@NonNull MyAdapter.MyViewHolder holder, int position) {
MyFiles item = myFiles.get(position);
if (item.isHighlighted()) {
// change to desired color
item.setHighlighted(true);
holder.itemView.setBackgroundColor(activity.getResources().getColor(R.color.grey));
} else {
// change to default color
item.setHighlighted(false);
holder.itemView.setBackgroundColor(activity.getResources().getColor(R.color.white));
}
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (!isModeEnabled) {
// highlight item here
item.setHighlighted(!item.isHighlighted());
isActionModeEnabled = true;
Highlight(holder);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isActionModeEnabled) {
// highlight item here
item.setHighlighted(!item.isHighlighted());
Highlight(holder);
}
}
}
}
@Override
public int getItemViewType(int position) {
return position;
}
public void Highlight(MyViewHolder holder) {
isSelectMode = true;
MyFiles files = myFiles.get(holder.getAdapterPosition());
if (!selectList.contains(files)){
selectList.add(files);
} else {
selectList.remove(files);
}
}
}
public class MyFiles{
public long id;
public String path;
private boolean isHighlighted = false;
public boolean isHighlighted() {
return isHighlighted;
}
public void setChecked(boolean isHighlighted) {
this.isHighlighted = isHighlighted;
}
public MyFiles(Long id, String title, boolean isHighlighted) {
this.id = id;
this.title = title;
this.isHighlighted = isHighlighted;
}
}
有人可以帮忙吗?谢谢!
【问题讨论】:
-
覆盖
getItemViewType方法。@Override public int getItemViewType(int position) { return position; } -
我编辑了上面的代码,但是滚动后高亮状态仍然消失了。
-
很少有项目丢失突出显示状态?还是所有选定的项目?
-
所有选择的项目。
-
如果您的项目开源,您可以分享 git,或者如果您愿意,您可以在社交媒体中收件我完整的项目。很抱歉,我没有根据附加的代码找出问题。
标签: android-recyclerview highlight items