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