首页 > 解决方案 > 项目背景更改不正确。日志显示正确的值。如何解决?

问题描述

通过多选选择产品后,我试图在适配器recyclerview中添加项目背景颜色的更改,但是,在选择第二个和后续产品后,背景颜色更改不正确。日志显示正确选择的产品,但是对于来自 recyclerview 的不同产品,背景会随机变化。禁用多选并同时清空选中商品列表后,随机选中商品的背景不断变化。

...

   @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
        ...

        if (dayOfNotification.after(expirationDateDt))
            viewHolder.itemView.setBackgroundColor(resources.getColor(R.color.background_expired_products));
        if (multiSelectList.contains(productList.get(position))) {
            viewHolder.itemView.setBackgroundColor(resources.getColor(R.color.background_product_selected));
            Log.d(String.valueOf(productList.get(position).getId()), productList.get(position).getName());
        }

...

我只想更改选定产品的背景颜色。

标签: javaandroidandroid-recyclerview

解决方案


对于您的onBindViewHolder方法条件,您必须在两种情况下都设置背景if-else。检查这里...

if (dayOfNotification.after(expirationDateDt)){
             viewHolder.itemView.setBackgroundColor(resources.getColor(R.color.background_expired_products));
    }
else{
  viewHolder.itemView.setBackgroundColor(resources.getColor(R.color.background_not_expired_products));
          //for not expired item color as background_not_expired_products
 }
if (multiSelectList.contains(productList.get(position))) {
                viewHolder.itemView.setBackgroundColor(resources.getColor(R.color.background_product_selected));
 Log.d(String.valueOf(productList.get(position).getId()), productList.get(position).getName());
            }
else{
    viewHolder.itemView.setBackgroundColor(resources.getColor(R.color.background_product_not_selected));
    //say background_product_not_selected as your color for not selected item

    }

推荐阅读