listview item中带checkbox、滑动数据和从数据库取的数据相互覆盖 求大神解脱、搞了两天都没发现怎么破、 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 Mediaplayer的简单程序 小弟求安卓开发入门视频,谢谢啦 新手弱弱问下~ 实现”光标停在某个文本框,然后点击按钮去往二维码扫描回来把结果显示在这个文本框上“ 一个activity中的多个view切换,处理返回键 关于textview的方法 android调用人人信息 Android 速度慢 请教!!SAX方式读取xml出问题 AlertDialog.setView(listview); 高度始终充满整个屏幕,求助,怎么更改高度 想做一个android锁屏程序,求大神们指导 跪求如何配置安卓软件开发环境
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);
}
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());
}
}
});
}