求大神解脱、搞了两天都没发现怎么破、

解决方案 »

  1.   

               
                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);
                    }
                  
      

  2.   

    单独的上下滑动数据混乱那个解决了、现在的问题是第一次从数据库里查数据、然后判断checkbox是选中还是不选中、checkbox有个默认状态(打钩或者不打钩)、然后上下滑动的时候是从缓存里面取数据判断、但是会和从数据里查的数据相互覆盖、
      

  3.   

    这个方法是上下滑动保存当前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());
                    }
                }
            });
        }