滑动错乱是因为复用了适配器里面的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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_weight="3"
android:background="#4086"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:textSize="15dp"
android:text="歌曲名字"
android:id="@+id/musicname"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_below="@id/musicname"
android:weightSum="3"
android:layout_height="wrap_content">
<RadioGroup
android:layout_below="@id/musicname"
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_weight="2"
android:orientation="horizontal"
android:weightSum="2">
<RadioButton
android:id="@+id/up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="上一首" />
<RadioButton
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="下一首" />
</RadioGroup>
<Button
android:layout_toRightOf="@id/group"
android:id="@+id/play"
android:text="播放"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>
记得用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<RadioBase,BaseViewHolder> {
public RecyclerAb(@Nullable List<RadioBase> 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())
;
}
}