RecyclerView设置点击选中更改背景颜色和文字颜色

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));
    }

文章参考添加链接描述 原文写的非常清楚,如果大家看不懂我写的话,一定要回去看看原文呀!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qingshan_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值