view.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton button, boolean isCheck) {
if(isCheck){
sendPhones.put(nameList.get(position),phoneList.get(position) );
}else if(!isCheck){
if(sendPhones!=null)
sendPhones.remove(nameList.get(position));
}
}
});这是ListView下的checkBox,我将选择的CheckBox相应的数据保存在LIST中,但是会出现一个问题,由于数据比较多,选择多个项的时候,需要下拉ListView,但是一旦下拉超过一页以后,List中保存的选中项数据就没有了!
希望哪位指点下,看看是什么情况。

解决方案 »

  1.   


    public class MyAdapter extends BaseAdapter{
    private LayoutInflater mInflater;

    public MyAdapter(){
    mInflater =(LayoutInflater) getSystemServic(LAYOUT_INFLATER_SERVICE); }

    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return data.size();
    } @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
    } @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder view = null;
    sendPhones = new HashMap();
    if(convertView==null){
    view = new ViewHolder();
    convertView = mInflater.inflate(R.layout.phone, null);
    view.name = (TextView)convertView.findViewById(R.id.name);
    view.phone = (TextView)convertView.findViewById(R.id.phone);
    view.call = (Button)convertView.findViewById(R.id.call);
    view.check = (CheckBox)convertView.findViewById(R.id.msgCheck);
    convertView.setTag(view);
    }else{
    view = (ViewHolder)convertView.getTag();
    }
    view.name.setText(nameList.get(position).toString());
    view.phone.setText(phoneList.get(position).toString());
    view.call.setOnClickListener(new OnClickListener() { 
                         public void onClick(View v) {
    String phoneNo = phoneList.get(position).toString();
    String url = "tel:" + phoneNo;
    Uri uri = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_CALL, uri);
    startActivity(intent);
    }
    });

    view.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton button, boolean isCheck) {


    if(isCheck){ sendPhones.put(nameList.get(position),phoneList.get(position) );
    }else if(!isCheck){
    if(sendPhones!=null)
    sendPhones.remove(nameList.get(position));
    }
    }
    });
    return convertView;
    }

    }
      

  2.   

    我在listView中遇到类似的问题:
    listView每一行都有一个CheckBox,当选中了以后,来回滚动listView,有时会发现CheckBox没被选中,十分诡异.....
    我的解决方法如下:
    选中CheckBox以后,用一个变量来保存CheckBox的状态,然后在Adapter中的getView方法中通过检查该变量来设置CheckBox的状态。这样listview来回滚动刷新界面的时候都会根据该变量来设置复选框状态。
    HashMap<Integer, Boolean> state = null;
    保存选择状态每次选择的时候
    checkstate.put(pos, checkBox.isChecked());getView()方法里
    boolean checked = checkstate.get(data.get(position).get(pos));
    checkBox.setChecked(checked);
      

  3.   

    怎么会得不到,你不是把选择结果放到缓存了(HashMap),选择的时候就加进去,取消选择就remove,这个Hashmap是全局变量,你只要不取消,里边数据一直在的,就是说选择过的东西始终在的。
      

  4.   

    我写的有啊。。是存放了的,你看下代码view.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
        public void onCheckedChanged(CompoundButton button, boolean isCheck) {
            if(isCheck){        
                sendPhones.put(nameList.get(position),phoneList.get(position) );
            }else if(!isCheck){
                if(sendPhones!=null)
                    sendPhones.remove(nameList.get(position));
            }
        }
    });但是就是这个List里面的数据都没有了!
      

  5.   

    我印象中,在layout.xml里面关于checkbox有个属性的,可以拖长显示内容的,不过这个时候,电脑没有android环境,要回家才可以,如果楼主急需要答案,可以先按这个办法去找找。
      

  6.   

    你光这样写,但是你没有在BaseAdapter的getView方法中去获取啊
    getView()方法里:
    boolean checked = sendPhones.get(nameList.get(position));
    checkBox.setChecked(checked);还有这个hashmap存放的值应该是checkbox的被选择状态,你存的是啥?phoneList.get(position)????楼主的代码有一处写的相当不专业...
    if(isCheck){}else{
    ....
    }
    就行了
      

  7.   

    厄。。我用的事HASHMAP。。之前写成LIST了。。只不过我是直接保存的数据,dr8737010 你保存的事状态。。可是我保存的数据只要下拉ListView超过一页,就没有了kirasum那个可以拖长显示内容 是用来做啥的。。我刚开始学没多久。。不清楚
      

  8.   

    你光这样写,但是你没有在BaseAdapter的getView方法中去获取啊
    getView()方法里:
    boolean checked = sendPhones.get(nameList.get(position));
    checkBox.setChecked(checked);
    写了,不管用。我选择的信息还是丢失了