闹钟列表的界面,listview中每个item都有个checkbox控件,并且它的状态还控制着一个textview的显示内容。
当添加闹钟大于listview长度,滑动时,checkbox的状态会出现混乱的情况,包括checkbox所控制的控件如TextView,也会出现复用错位。
解决办法:
在适配器的构造方法中 就将所有闹钟的状态拿出来,存进List集合中。
在getview()方法中通过指定的position,获取闹钟的状态,然后设置checkbox的状态和它控制的TextView的文本。
checkbox的状态变化时,记住要在在checkbox的监听事件里,将之前存进集合的对应的状态也改下。
适配器中的代码如下:
public class AlarmClockAdapter extends BaseAdapter {
private static final String TAG = "AlarmClockAdapter";
private Context context;
private List<AlarmClockInfo> alarmClockInfos;
private List<Integer> statePosition ; //闹钟状态的集合
public AlarmClockAdapter(Context context, List<AlarmClockInfo> alarmClockInfos) {
this.context = context;
this.alarmClockInfos = alarmClockInfos;
statePosition = new ArrayList<Integer>(alarmClockInfos.size());
//在构造方法里把闹钟的 状态 存放进集合 目的:解决checkbox和它所控制的textview,在滑动时的复用错位
for (AlarmClockInfo clockInfo : alarmClockInfos) {
statePosition.add(clockInfo.getState());
}
}
public void setAlarmClockInfos(List<AlarmClockInfo> alarmClockInfos){
this.alarmClockInfos = alarmClockInfos;
}
@Override
public int getCount() {
return