listview item中带checkbox、滑动数据和从数据库取的数据相互覆盖
求大神解脱、搞了两天都没发现怎么破、 --------------------编程问答--------------------convertView = LayoutInflater.from(mContext).inflate(R.layout.device_setting_01,
null);
viewHolder.textDevice = (TextView) convertView
.findViewById(R.id.setting_device);
viewHolder.spTime = (Spinner) convertView.findViewById(R.id.spinner_time);
viewHolder.spTime.setAdapter(mDelayAdapter);
viewHolder.defence_on = (CheckBox) convertView.findViewById(R.id.defence_on);
viewHolder.defence_off = (CheckBox) convertView.findViewById(R.id.defence_off);
/************************ 从数据库查的默认数据 **********************/
String model01 = list.get(position).get("isselect").toString();
String model02 = list.get(position).get("denfenoff").toString();
System.out.println("model01 = " +model01+" model02 = " +model02);
String onIsSelect = null;
String offIsSelect = null;
if (model01.equals("0")) {
viewHolder.defence_on.setChecked(true);
onIsSelect = "0";
} else {
viewHolder.defence_on.setChecked(false);
onIsSelect = "1";
}
if (model02.equals("0")) {
viewHolder.defence_off.setChecked(true);
offIsSelect = "0";
} else {
viewHolder.defence_off.setChecked(false);
offIsSelect = "1";
}
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
switch (type) {
case 1:
viewHolder.textDevice.setText(list.get(position).get("devicename").toString());
final int deviceId = Integer
.parseInt(list.get(position).get("deviceid").toString());
String time = list.get(position).get("delaytime").toString();
for (int i = 0; i < times.length; i++) {
if (times[i] == time) {
viewHolder.spTime.setSelection(i);
break;
}
}
/******************** 翻页数据混乱 ************************/
viewHolder.defence_on.setTag(position);
viewHolder.defence_off.setTag(position);
if (mOnState.containsKey(position)) {
viewHolder.defence_on.setChecked(true);
} else {
viewHolder.defence_on.setChecked(false);
}
if (mOffState.containsKey(position)) {
viewHolder.defence_off.setChecked(true);
} else {
viewHolder.defence_off.setChecked(false);
}
--------------------编程问答-------------------- 单独的上下滑动数据混乱那个解决了、现在的问题是第一次从数据库里查数据、然后判断checkbox是选中还是不选中、checkbox有个默认状态(打钩或者不打钩)、然后上下滑动的时候是从缓存里面取数据判断、但是会和从数据里查的数据相互覆盖、 --------------------编程问答-------------------- 这个方法是上下滑动保存当前position checkbox选中和不选中的、即为缓存数据
private void setOnCheck(ViewHolder viewHolder, final int position) {
viewHolder.defence_off.setOnCheckedChangeListener(new OnCheckedChangeListener() {
// 记录撤防checkbox选中和不选中状态
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mOffState.put((Integer) buttonView.getTag(), position);
} else {
mOffState.remove((Integer) buttonView.getTag());
}
}
});
viewHolder.defence_on.setOnCheckedChangeListener(new OnCheckedChangeListener() {
// 记录布防checkbox选中和不选中状态
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mOnState.put((Integer) buttonView.getTag(), position);
} else {
mOnState.remove((Integer) buttonView.getTag());
}
}
});
}
补充:移动开发 , Android