首页 > 解决方案 > Recyclerview 以编程方式设置背景颜色

问题描述

我正在通过改造从服务器获取数据。如果数据为正,则颜色应为绿色,否则应为红色。就像 Sensex 一样,如果它是阳性的,那么它会显示绿色,否则会显示红色。 请参阅图像以供参考。我在下面完成了 Onbind 视图,但它用于网格视图中的位置

@Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        if(position % 2 ==0) {
            holder.itemView.setBackgroundColor(
                    ContextCompat.getColor(holder.itemView.getContext(), R.color.red));
        } else {
            holder.itemView.setBackgroundColor(
                    ContextCompat.getColor(holder.itemView.getContext(), R.color.green));
        }

如何实现。

标签: androidandroid-recyclerviewretrofitandroid-cardview

解决方案


  1. 您可以准备一个单独的列表来显示adapter.like中的数据 - `List<ListItem> listDisplay= new ArrayList()`
  2. 创建提供 getter() 和 setter() 方法的 ListItem 类。访问https://www.w3schools.com/java/java_encapsulation.asp。您可以根据您的要求在该类中创建一个变量及其 getter() 和 setter() 方法,以在卡片视图上显示数据
  3. 当您将从服务器接收列表数据时,创建 ListItem 类的实例并使用循环只需将接收到的值设置为其变量并将接收到的数据项添加到列表 listDisplay
  4. 在初始化时将此 listDisplay 传递给 adapter 的构造函数。
  5. 在适配器的 onBindViewHolder() 方法中,执行以下代码
     position) {
   //create a ListItem
   ListItem listItem = *listMaintainedInAdapter*.get(position)
           
   /*create a instance of adapter's view holder class who holds the 
    views reference.*/
    
   
   /*Check data is positive or not. here, num is variable declared in 
         ListItem class who holds the value which you want to check*/
   
   if(listItem.num > 0){    
         //set card colour to green
   }else{
           //set card colour to red.
   }
}```

推荐阅读