在Recyclerview中使用Switch控件被复用的解决方法

前言

在Recyclerview中使用Switch控件时,遇到了一个以前没有遇过的问题————控件被复用,我点击了第一个开关,意外发现往后的每10个控件里面就有1个被打开了,网上很多方法试了都没用,于是改了一个上午才解决了这个问题。

解决思路

可以给对象添加一个临时变量T_IsChecked,用来判断是否被选中,在onBindViewHolder时判断T_IsChecked的状态,将switch置为相应的状态,并对switch的点击事件进行监听,然后再通过回调调用adapter的notifyDataSetChanged函数进行状态的刷新,从而解决这个方法。

代码实现

重写OnBindViewHolder函数,判断当前开关状态

if(goods.T_IsChecked){
   mSwitch.setChecked(true);
} else {
   mSwitch.setChecked(false);
 }
//对开关控件进行监听
mSwitch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                goods.T_IsChecked = !goods.T_IsChecked;
                if(mListener != null){
                    mListener.onItemClick();//回调刷新状态
                }
            }
        });

回调接口

    public interface onClickListener {
        void onItemClick();
    }

    private onClickListener mListener;
    public void setOnItemClickListener(onClickListener listener) {
        this.mListener = listener;
    }

在Activity中设置点击事件

mAdapter.setOnItemClickListener(new MyAdapter.onClickListener() {
            @Override
            public void onItemClick() {
                //滑动停止时刷新数据,不加这行判断会导致程序崩溃
                if (!rv_menu_goods.isComputingLayout() && RecyclerView.SCROLL_STATE_IDLE == rv_menu_goods.getScrollState()) {
                    mAdapter.notifyDataSetChanged();
                }
            }
        });

这样就可以解决在Recyclerview中Switch控件被复用的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值