根据内容设置 RecyclerView 项目的背景颜色

Set background color for RecyclerView item depending on content

简短说明: 我在 RecyclerView 项目中显示预期库存与计数库存。这个想法是,如果预期和计数的项目存在差异 b/n,则将数量设为红色,否则设为黑色。我得到的结果是所有卡片中的所有项目最终都是红色的。

我的尝试: 我尝试比较 onBindViewHolder() 中的两个数量,其中写了大多数项目特定的内容,但我没有得到结果。

public class PastInvDetailsAdapter extends
    RecyclerView.Adapter<PastInvDetailsAdapter.ViewHolder> {
ArrayList<Material> countedquantity;
PastInvDetailsActivity currentActivity;

public static class ViewHolder extends RecyclerView.ViewHolder {
    public TextView material_description;
    public TextView actualquantity;
    public TextView countedquantity;

    public ViewHolder(View view) {
        super(view);
        material_description = view.findViewById(R.id.tv_past_inv_details_material_desc);
        actualquantity = view.findViewById(R.id.tv_past_inv_details_current_no);
        countedquantity = view.findViewById(R.id.tv_past_inv_details_counted_no);
    }
}

public PastInvDetailsAdapter(ArrayList<Material> countedquantity, PastInvDetailsActivity currentActivity) {
    this.countedquantity = countedquantity;
    this.currentActivity = currentActivity;
}

@Override
public PastInvDetailsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(currentActivity.getApplicationContext())
            .inflate(R.layout.past_inventory_details_item, parent, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.material_description.setText(countedquantity.get(position).getMaterial() + " " +
            countedquantity.get(position).getDescription());
    holder.actualquantity.setText("Expected: " + countedquantity.get(position).getActualquantity());
    holder.countedquantity.setText("Counted: " + countedquantity.get(position).getQuantity());

    int actualInt = Integer.parseInt(countedquantity.get(position).getActualquantity());
    int expectedInt = Integer.parseInt(countedquantity.get(position).getQuantity());

    if (actualInt != expectedInt) {
        holder.countedquantity.setTextColor(Color.RED);
        holder.actualquantity.setTextColor(Color.RED);
    } else {
        holder.countedquantity.setTextColor(Color.RED);
        holder.actualquantity.setTextColor(Color.RED);
    }
}

@Override
public int getItemCount() {
    return countedquantity.size();
}

}

这是否是问题所在?

 if (actualInt != expectedInt) {
    holder.countedquantity.setTextColor(Color.RED);
    holder.actualquantity.setTextColor(Color.RED);
} else {
    holder.countedquantity.setTextColor(Color.RED);
    holder.actualquantity.setTextColor(Color.RED);
}

更改为:

if (actualInt != expectedInt) {
    holder.countedquantity.setTextColor(Color.RED);
    holder.actualquantity.setTextColor(Color.RED);
} else {
    holder.countedquantity.setTextColor(Color.BLACK);
    holder.actualquantity.setTextColor(Color.BLACK);
}