listView 的item有CheckBox,怎么解决状态被复用

第一次写博客,不喜勿喷



关于LIstView的item里面有checkbox,在数据源过多时,可能会出现复用,在网上找了一大堆,什么修改数据源,什么什么的好多,鄙人智商低于90,完全看不懂,也没有兴趣看。于是就傻叉一样的改啊想啊想啊改啊,最后解决了。

不bb了

步骤1:自定义一个接口,接口中申明一个方法

public interface DataChange {
    void change(boolean b,int position);//b是checkbox的状态,position是当前item在数据源中的位置。
}
这是我的接口


步骤2:

让listView所在的Activity去实现这个接口,实现里面的方法

@Override
public void change(boolean b, int position) {
    list.get(position).setIsChecked(b);
}
步骤3:

在Adapter中申明一个Activity实例

其中Adapter的构造方法如下:

public MyAdapter(Context context,List<Bean> list,MainActivity activity) {
    this.list = list;
    this.inflater = LayoutInflater.from(context);
    this.activity = activity;
}

最后,也是最重要的一步:

在Adapter的getView()方法中,在设置checkbox状态之前先设置其状态发生改变时的监听器:

holder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        activity.change(isChecked,position);
    }
});

if(bean.isChecked()){
    holder.cb.setChecked(true);
}else {
    holder.cb.setChecked(false);
}
然后就可以解决其位置被复用了的问题了。做的时候很难,做出来的时候就很简单了。

猜你喜欢

转载自blog.csdn.net/lljjyy001/article/details/50971152