Recyclerview 以编程方式设置背景颜色

Recyclerview setting background color programatically

我正在通过改造从服务器获取数据。如果数据为正,则颜色应为绿色,否则应为红色。就像 Sensex 一样,如果它是正的,那么它显示绿色,否则显示红色。 See Image for reference.Onbind viewholder 我在下面完成但它用于网格视图中的位置

@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));
        }

如何实现。

  1. 您可以准备一个单独的列表来显示adapter.like中的数据 - `List<ListItem> listDisplay= new ArrayList()`
  2. 创建 ListItem class,它提供 getter() 和 setter() 方法。 访问 https://www.w3schools.com/java/java_encapsulation.asp 。您可以创建 一个变量和它的 getter() & setter() 方法在此 class 基于 您在卡片视图上显示数据的要求
  3. 当您将从服务器接收列表数据时,创建一个实例 ListItem class & 使用循环只是将接收到的值设置为其 变量并将接收到的数据项添加到列表listDisplay
  4. 在初始化时将此 listDisplay 传递给适配器的构造函数。
  5. 在 adapter 的 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.
   }
}```
    @Override
        public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
            val data = list[holder.adapterPosition]
            if (data.changeValue > 0) {
                holder.itemView.setBackgroundColor(
                        ContextCompat.getColor(holder.itemView.getContext(), R.color.red));
            } else {
                holder.itemView.setBackgroundColor(
                        ContextCompat.getColor(holder.itemView.getContext(), R.color.green));
            }
    }

其中 data.changeValue 是来自 API 的数据值,例如 207.57 或 -63.85(我只是假设)。我希望这个解决方案能解决您的问题。