RecyclerView 点击Item 改变文字颜色及背景色、线条颜色

前言

项目中涉及到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());
        }
        
   }

总结

不能偷懒!
不能偷懒!
不能偷懒!

猜你喜欢

转载自blog.csdn.net/Life_s/article/details/105818603