当前位置:编程学习 > wap >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,