前言
项目中涉及到RecyclerView的Item切换 并且改变背景框和文字颜色!
刚开始想到过让美工给切2个颜色的背景框实现切换底色(其实想偷懒)
但是后来想想这个方法不可行 因为还有item中的文字和线条呢 除非让美工一套图全部切下来 /偷笑.gif
想想还是老老实实自己实现吧
不多说了 直接看下效果图吧.gif
效果图
实现思路
我的想法是这样:
在Fragment或者Activity中做个标记currentPosition
在点击了Item的时候将position记录下来,并刷新适配器
然后在Adapter中设置回调监听,在convert()方法中设置回调监听
最后在Fragment或者Activity使用监听判断当前位置是否和传入的position是否一致
一致就设置选中的背景,文字颜色,及线条颜色
不一致就要修改Item中的背景,文字颜色,及线条颜色
好了 思路差不多就这样,下面看实现代码 很简单
代码实现
Fragment或Activity中
//记录当前位置
private int currentPosition = 0;
//初始化点击事件
private void initEvent() {
mRechargeAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter,
@NonNull View view, int position) {
//这里赋值
currentPosition = position;
//每点击一次item就刷新适配器
mRechargeAdapter.notifyDataSetChanged();
}
});
mRechargeAdapter.setItemSelectedCallBack(new
RechargeAdapter.ItemSelectedCallBack() {
@Override
public void convert(BaseViewHolder holder,int position) {
//初始化组件
View bg = holder.getView(R.id.view_bg);
View line = holder.getView(R.id.view_line);
TextView price = holder.getView(R.id.tv_member_price);
TextView time = holder.getView(R.id.tv_member_time);
TextView giveAway = holder.getView(R.id.tv_member_give_away);
//判断传入的position是否和当前一致
if (position == currentPosition) {
bg.setBackgroundResource(R.drawable.member_price_selected_bg);
line.setBackgroundResource(R.color.colorWhite);
price.setTextColor(Color.WHITE);
time.setTextColor(Color.WHITE);
giveAway.setTextColor(Color.WHITE);
} else {
bg.setBackgroundResource(R.drawable.member_price_unselected_bg);
line.setBackgroundResource(R.color.colorBlack);
price.setTextColor(Color.BLACK);
time.setTextColor(Color.BLACK);
giveAway.setTextColor(Color.BLACK);
}
}
});
}
Adapter中实现
//回调
private ItemSelectedCallBack mCallBack;
public void setItemSelectedCallBack(ItemSelectedCallBack CallBack) {
this.mCallBack = CallBack;
}
public interface ItemSelectedCallBack {
void convert(BaseViewHolder holder, int position);
}
在convert()方法中
@Override
protected void convert(@NonNull BaseViewHolder holder, PayModel payModel) {
if (mCallBack != null) {
mCallBack.convert(holder, holder.getLayoutPosition());
}
}
总结
不能偷懒!
不能偷懒!
不能偷懒!