简体   繁体   English

RecyclerView 中背景颜色变化不一致?

[英]Inconsistent Background Color Changes in RecyclerView?

I am trying to Change the Background of certain CardViews when the user click and Opens the particular items.当用户单击并打开特定项目时,我试图更改某些 CardViews 的背景。

This is achieved, but as I scroll to bottom or top, certain other cards also change their colors.这是实现的,但是当我滚动到底部或顶部时,某些其他卡片也会改变它们的颜色。 Why is that ?这是为什么 ? Can u guys please provide a Fix.你们可以提供一个修复。

Here is my Adapter Code :这是我的适配器代码:

  public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(context).inflate(R.layout.resources_layout, parent, false);
    return new ResourcesAdapter.ViewHolder(v);

}

  @Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {


    final ResourcesModel resourcesModel = resourcesModelList.get(position);
    holder.book_title.setText(resourcesModel.getBook_title());
    holder.book_description.setText(resourcesModel.getBook_description());
    holder.book_price.setText(resourcesModel.getBook_price());
    Glide.with(context).load(resourcesModel.getBook_image()).placeholder(R.drawable.placeholder).into(holder.book_image);


    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, ResourcesDetails.class);
            intent.putExtra("Title", resourcesModel.getBook_title());
            intent.putExtra("Description", resourcesModel.getBook_description());
            intent.putExtra("Price", String.valueOf(resourcesModel.getBook_price()));
            intent.putExtra("BookImage", resourcesModel.getBook_image());
            intent.putExtra("PDFS", resourcesModel.getPdf());
            context.startActivity(intent);
        }
    });

    String k = holder.book_title.getText().toString();
    SharedPreferences myPreferences;
    SharedPreferences.Editor myEditor;
    myPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    String name = myPreferences.getString(k, "notWatched");
    Log.e("Name Value ADAPTER :", String.valueOf(name));

    if (myPreferences.contains(k)) {
        holder.cardView.setBackgroundColor(context.getResources().getColor(R.color.color_bought));
    }

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

class ViewHolder extends RecyclerView.ViewHolder {
    ImageView book_image;
    TextView book_title, book_description, book_price, pdfLinks;
    Button buy_btn;
    MaterialCardView cardView;
    ImageView tick;


    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        book_image = itemView.findViewById(R.id.book_img);
        book_title = itemView.findViewById(R.id.book_title);
        book_description = itemView.findViewById(R.id.book_description);
        book_price = itemView.findViewById(R.id.book_price);
        cardView = itemView.findViewById(R.id.cardView);

    }
    if (myPreferences.contains(k)) {
        holder.cardView.setBackgroundColor(context.getResources().getColor(R.color.color_bought));
    }

You're not setting the background color back to the default if it's not in myPreferences .如果它不在myPreferences您不会将背景颜色设置回默认值。 Because of ViewHolder recycling, you need an } else { case to handle this.由于 ViewHolder 回收,您需要一个} else {案例来处理此问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM