Android - 在 RecyclerView 中滚动时颜色重复
Posted
技术标签:
【中文标题】Android - 在 RecyclerView 中滚动时颜色重复【英文标题】:Android - Color repeat on scrolling in RecyclerView 【发布时间】:2020-09-30 07:19:35 【问题描述】:我有一个 RecyclerView,其中选定数量的项目显示不同的背景颜色。
它给了我很多不同颜色的视图。
我使用适配器的位置来改变颜色,后来我发现滚动时位置改变了。
所以我给 ArrayList 的每个对象一个唯一的代码。如果唯一代码与给定代码匹配,我让程序更改背景颜色。
喜欢,
uniqueCode = 5;
public void onBindViewHolder(//..)
Object object = objectArrayList.get(i);
if(object.uniqueCode() == uniqueCode )
holder.layout.setBackgroundColor(//....);
但我仍然得到一些视图更改滚动时的背景颜色,这与该唯一 ID 不匹配。
这个问题的解决方法是什么?
【问题讨论】:
【参考方案1】:如果我理解正确,则有多个具有“唯一”颜色的单元格,但它不应该。发生这种情况是因为您从未将布局的背景重置为默认颜色。
if(object.uniqueCode() == uniqueCode)
holder.layout.setBackgroundColor(/*unique color*/);
else
holder.layout.setBackgroundColor(/*default color*/);
【讨论】:
是的,它解决了我的问题。非常感谢@K.Kotsi。但是你能解释一下发生了什么吗?如果没有给出else,它应该自动选择默认颜色。正确的 ?。但它不会那样做! 这就是 RecyclerView 的工作方式。假设您要显示 5 个单元格。 android 将使用相同的 5 个视图,并且只会更改您要显示的数据。它不会创建新视图。 OnBindViewHolder 仅在 android 更改将要在特定单元格显示的数据时调用。而是在创建新单元格时调用 OnCreateViewHolder。尝试运行一些测试以了解它是如何工作的,也可以查看这个 *** answer以上是关于Android - 在 RecyclerView 中滚动时颜色重复的主要内容,如果未能解决你的问题,请参考以下文章
android: ScrollView 内的 RecyclerView
Android:在 Recyclerview 中更改图像旋转