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之recyclerview的基本使用

android: ScrollView 内的 RecyclerView

Android:在 Recyclerview 中更改图像旋转

RecyclerView:错误的滚动效果(Android)

Android Studio(Kotlin)之RecyclerView

Android RecyclerView的基本使用