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中保存的选中项数据就没有了!
希望哪位指点下,看看是什么情况。
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;
}
}
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);
@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里面的数据都没有了!
getView()方法里:
boolean checked = sendPhones.get(nameList.get(position));
checkBox.setChecked(checked);还有这个hashmap存放的值应该是checkbox的被选择状态,你存的是啥?phoneList.get(position)????楼主的代码有一处写的相当不专业...
if(isCheck){}else{
....
}
就行了
getView()方法里:
boolean checked = sendPhones.get(nameList.get(position));
checkBox.setChecked(checked);
写了,不管用。我选择的信息还是丢失了