第一次写博客,不喜勿喷
关于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); }然后就可以解决其位置被复用了的问题了。做的时候很难,做出来的时候就很简单了。