BaseQuickAdapter 解决滑动错乱问题

 滑动错乱是因为复用了适配器里面的ConverView复用导致的 那如何解决呢

我就直接说如何解决把

1一般适配器是为了展示数据 有数据就说明有实体类  所以我们要在实体类进行操作

 

2在实体类的属性 定义一个变量

  private String name;    //原有的
    private int checkNum;        //我们创建的

然后get set 

实体类全部代码

package com.example.ypc.musictext.code;

public class RadioBase {
    private String name;
    private int checkNum;
    @Override
    public String toString() {
        return "RadioBase{" +
                "name='" + name + '\'' +
                ", checkNum=" + checkNum +
                '}';
    }

    public RadioBase() {
    }

    public RadioBase(String name) {
        this.name = name;
    }

    public String getName() {

        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCheckNum() {
        return checkNum;
    }

    public void setCheckNum(int checkNum) {
        this.checkNum = checkNum;
    }

}

3 开始在适配器进行操作 解决滑动错乱

我们就拿radiobutton 进行演示

这是xml



    
    
        

            

            
        

        

记得用group包裹

5操作

//我这样获取到这个控件  虽然有点麻烦 
RadioGroup group= helper.getView(R.id.group);
        group.setOnCheckedChangeListener(null);    //先把点击事件取消
        group.clearCheck();                //这一步很重要 ,  取消所有的点击效(Radiobutton)
        //根据实体类  自己定义的变量判断选择哪一个    
    switch (item.getCheckNum()){
            case 1:
                group.check(R.id.up);
                break;
            case 2:
                group.check(R.id.next);
                break;
        }
        //根据点击事件给实体类赋值
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                int p=0;
                switch (checkedId){
                    case R.id.up:
                        p=1;
                        break;
                    case R.id.next:
                        p=2;
                        break;
                }
                item.setCheckNum(p);        //给实体类赋值
            }
        });

这样就解决了

适配器所有代码

package com.example.ypc.musictext.adapter;

import android.support.annotation.Nullable;
import android.widget.RadioGroup;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.ypc.musictext.R;
import com.example.ypc.musictext.code.RadioBase;

import java.util.List;

public class RecyclerAb extends BaseQuickAdapter {

    public RecyclerAb(@Nullable List data) {
        super(R.layout.musicitem,data);
    }

    @Override
    protected void convert(BaseViewHolder helper, final RadioBase item) {
        RadioGroup group= helper.getView(R.id.group);
        group.setOnCheckedChangeListener(null);
        group.clearCheck();
        switch (item.getCheckNum()){
            case 1:
                group.check(R.id.up);
                break;
            case 2:
                group.check(R.id.next);
                break;
        }
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                int p=0;
                switch (checkedId){
                    case R.id.up:
                        p=1;
                        break;
                    case R.id.next:
                        p=2;
                        break;
                }
                item.setCheckNum(p);
            }
        });
        helper.addOnClickListener(R.id.play);
        helper.addOnClickListener(R.id.up);
        helper.addOnClickListener(R.id.next);
        helper.setText(R.id.musicname,item.getName())
               ;

    }
}

 

你可能感兴趣的:(滑动错乱)