模拟下在项目中出现的问题
<1>选中3个
![](http://dl.iteye.com/upload/attachment/610432/7765a45d-5871-352c-ae73-7ccaae28d744.bmp)
![](http://dl.iteye.com/upload/attachment/610432/7765a45d-5871-352c-ae73-7ccaae28d744.bmp)
<2>往下滑动
![](http://dl.iteye.com/upload/attachment/610434/b5ba2685-9a8c-3bed-8772-d77a247080f4.bmp)
<3>网上滑动后,刚才勾选的消失了
![](http://dl.iteye.com/upload/attachment/610436/4ba15058-a7e8-39f8-887b-30d220f1cecc.bmp)
当时项目的解决方法
设一个MAP用于存方 是否勾选的boolean值。
checkbox是图片做得
在设配器里增加一个全局的map
public Map<Integer, Boolean> isSelected=new HashMap<Integer, Boolean>();
捕获事件处理,屏蔽了checkbox的事件:lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
cb=(CheckBox) view.findViewById(R.id.cb);
//切换图片状态,选中或者没选中
cb.toggle();
//将状态存到map里保存
adapter.isSelected.put(position, cb.isChecked());
}});
在适配器的处理的方式 :if(isSelected!=null&&isSelected.get(position)!=null){
holder.cb.setChecked(isSelected.get(position));
}
改后效果
<1>
![](http://dl.iteye.com/upload/attachment/610438/e46b122d-ceb8-38bd-a8e4-c0feed1e3de6.bmp)
![](http://dl.iteye.com/upload/attachment/610438/e46b122d-ceb8-38bd-a8e4-c0feed1e3de6.bmp)
<2>下拉后,会发现第二页有3项莫名的被选了
![](http://dl.iteye.com/upload/attachment/610440/2fcd71f3-82e3-35c9-ab10-6c97bdebf221.bmp)
<3>
拉回去,0,1,2依旧被勾选了的
![](http://dl.iteye.com/upload/attachment/610442/ce2893ea-44ea-36c7-b2eb-697fd0e88827.bmp)
问题解决了,但是出现了个新的问题,当你勾选了1,2,3,当你向后滚动发现另一个view也莫名奇妙的勾选了
解决方式:
第一种方式
public View getView(final int position, View convertView, ViewGroup parent) {
// 去掉下面那句,但是以后就每次会生成新的convertView
//if(convertView==null)
convertView=inflater.inflate(R.layout.a,null);
第二种方式
boolean flag=false;
holder.cb.setChecked(flag);
if(isSelected!=null&&isSelected.get(position)!=null){
holder.cb.setChecked(isSelected.get(position));
}