Search code examples
androidandroid-recyclerviewandroid-imageviewandroid-eventandroid-background

Android Remove Background property in Image view


I am added a background image highlight in RecyclerView Image:

but when i click the image previous selected image highlight is also shown. how to fix this. my code is

holder.colorImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            holder.colorImage.setBackgroundResource(0);

            for (int i = 0; i < colorId.size(); i++) {

                holder.colorImage.setBackgroundResource(R.drawable.image_border);
            }
        }

    });

Solution

  • What i get from question that one image will be show selected at a time . So its can be easily achieved by saving the selected image position as global, and notify the adapter . Below is an example .

     class LAdater extends RecyclerView.Adapter<LAdater.ViewHolder> {
        int selectedPosition;
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new ViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_color, null));
        }
    
        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            if (position == selectedPosition) {
                holder.colorImage.setBackgroundResource(R.drawable.image_border);
            } else {
                holder.colorImage.setBackgroundResource(0);
            }
        }
    
        @Override
        public int getItemCount() {
            return 9;
        }
    
        class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            ImageView colorImage;
    
            public ViewHolder(View itemView) {
                super(itemView);
                this.colorImage = (ImageView) itemView.findViewById(R.id.imageView);
                colorImage.setOnClickListener(this);
            }
    
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageView) {
                    selectedPosition = getAdapterPosition();
                    notifyDataSetChanged();
                }
            }
        }
    }
    

    Its just an example modify it as per your need.