【问题标题】:Android - Color repeat on scrolling in RecyclerViewAndroid - 在 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 不匹配。

这个问题的解决方法是什么?

【问题讨论】:

    标签: android scroll android-recyclerview repeat


    【解决方案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。尝试运行一些测试以了解它是如何工作的,也可以查看这个 stackoverflow answer
    猜你喜欢
    • 2016-09-27
    • 2016-05-25
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多