RecyclerView设置点击选中更改所点击卡片的背景颜色

在RecyclerView中对应的Adapter进行更改。主要思想是,创建点击事件,记录当前位置以及点击状态。对点击的选项位置和当前展示的选项位置进行对比,状态为点击了,就更换背景,没有被点击的都是原来的状态。

第一步:重写onCreateViewHolder()方法 在 onCreateViewHolder()方法中调用我们开始定义的点击事件

ItemClickEvent(holder);//调用点击事件  要放在return holder;前面

第二步:定义ItemClickEvent()
ItemClickEvent()主要是用于记录点击状态,isClick默认为false未点击,通过setCurrentPosition()方法记录当前点击项holder.getBindingAdapterPosition(),同时设置点击状态为true

//指定点击事件 记录点击状态:
    private boolean isClick;//用来记录是否点击
    private int currentPosition;//定义当前项
    //定义点击事件
    private void ItemClickEvent(CaViewHolder holder){
        holder.itemView.setOnClickListener(View->{
            if(!isClick){
            //调用setCurrentPosition()方法
                setCurrentPosition(holder.getAdapterPosition(),true);//记录并设为true
            }else {
            //当某项点击状态为true 点击的时候判断当前位置和getAbsoluteAdapterPosition()为点击更新后适配器的位置是否一致?不一致说明点击了新的选项,记录isClick为false 更新新的位置。
                setCurrentPosition(holder.getAbsoluteAdapterPosition(), //记录当前点击
                        getCurrentPosition()!=holder.getAbsoluteAdapterPosition());
            }
            notifyDataSetChanged();//更新页面状态
        });
   }
//创建getCurrentPosition 返回当前位置
    private int getCurrentPosition() {
        return currentPosition;
    }
    //创建setCurrentPosition方法 记录当前点击选项和点击状态
    public void setCurrentPosition(int currentPosition,boolean isClick){
        this.currentPosition=currentPosition;
        this.isClick=isClick;
    }

第三步:重写onBindViewHolder()方法,初始化 or 复用数据的状态
在onBindViewHolder()方法中进行判断并设置背景颜色。通过CurrentPosition 和isClick两个变量来控制显示的状态,如果position等于getCurrentPosition()当前点击项 且点击状态为true时显示红色背景否则就显示白色背景

@SuppressLint("ResourceAsColor")
    @Override
    public void onBindViewHolder(@NonNull CaViewHolder holder, int position) {
        //当前currentposition=当前子项并且点击了,就给他改个背景,否则就显示原来的颜色
        if (getCurrentPosition()==position && isClick()){       
         //如果这里只有isClick()时,发生点击事件的时候,所有的选项都会改变背景颜色
         //如果只有getCurrentPosition()==position 则打开的时候未点击状态也会默认显示一个点中的选项
         //如果是getCurrentPosition()!=position && isClick() 就是把点击之外的其他项变成红色
            holder.categoryListText.setBackgroundColor(Color.argb(255,255,0,0));//选中的背景色是红色
            holder.categoryListText.setTextColor(Color.argb(255,255,255,255));//选中的文字颜色是白色
        }else {
            holder.categoryListText.setBackgroundColor(Color.argb(255, 255, 255, 255));//没选中的是白色
            holder.categoryListText.setTextColor(Color.argb(255,0,0,0));//没选中的文字颜色是黑色
        }
        //这句是我之前显示RecyclerView选项文字的内容。
        holder.categoryListText.setText(listCategory.get(i));
    }