
问题:如果我检查屏幕上显示的初始项目然后滚动列表,当我返回列表顶部(向上滚动)时,它们的值被正确保存.但是,如果我滚动列表,例如我想检查列表中的最后一个树复选框,那么如果我上下滚动它们就会被取消选中….为什么?**
我在其他论坛上看到了同样问题的各种解决方案,也在stackoverflow上,但问题仍然存在.
在我的getVIEw函数下面,我认为是可以的:
@OverrIDe public VIEw getVIEw(final int position,VIEw convertVIEw,VIEwGroup parent) { final VIEwHolder vIEwHolder; if (convertVIEw == null) { convertVIEw = mInflater.inflate(R.layout.item_select_frIEnds,null); vIEwHolder=new VIEwHolder(); vIEwHolder.nameText=(TextVIEw) convertVIEw.findVIEwByID(R.ID.personname); vIEwHolder.surnameText=(TextVIEw) convertVIEw.findVIEwByID(R.ID.personSurname); vIEwHolder.contactimage=(ImageVIEw) convertVIEw.findVIEwByID(R.ID.personImage); vIEwHolder.checkBox=(CheckBox)convertVIEw.findVIEwByID(R.ID.checkBox); convertVIEw.setTag(vIEwHolder); vIEwHolder.nameText.setTag(vIEwHolder.nameText); vIEwHolder.nameText.setTag(vIEwHolder.surnameText); vIEwHolder.contactimage.setTag(data[position]); vIEwHolder.checkBox.setChecked(data[position].isCheck()); vIEwHolder.checkBox.setonClickListener(new OnClickListener() { public voID onClick(VIEw arg0) { if(vIEwHolder.checkBox.isChecked()==true) data[position].setCheck(true); else data[position].setCheck(false); } }); } else{ vIEwHolder = (VIEwHolder) convertVIEw.getTag(); } vIEwHolder.nameText.setText(data[position].getname()); vIEwHolder.surnameText.setText(data[position].getSurname()); vIEwHolder.contactimage.setimageResource(data[position].getPhotoRes()); vIEwHolder.contactimage.setScaleType(ScaleType.FIT_XY); vIEwHolder.checkBox.setChecked(data[position].isCheck()); return convertVIEw;} 解决:我解决了我的问题getVIEw whit这段代码:
public class NewQAAdapterSelectFrIEnds extends BaseAdapter {private LayoutInflater mInflater;private Person[] data;boolean[] checkBoxState;VIEwHolder vIEwHolder;public NewQAAdapterSelectFrIEnds(Context context) { mInflater = LayoutInflater.from(context);}public voID setData(Person[] data) { this.data = data; checkBoxState=new boolean[data.length];}@OverrIDepublic int getCount() { return data.length;}@OverrIDepublic Object getItem(int item) { return data[item];}@OverrIDepublic long getItemID(int position) { return position;}@OverrIDepublic VIEw getVIEw(final int position,VIEwGroup parent) { if (convertVIEw == null) { convertVIEw = mInflater.inflate(R.layout.item_select_frIEnds,null); vIEwHolder=new VIEwHolder(); vIEwHolder.nameText=(TextVIEw) convertVIEw.findVIEwByID(R.ID.personname); vIEwHolder.surnameText=(TextVIEw) convertVIEw.findVIEwByID(R.ID.personSurname); vIEwHolder.contactimage=(ImageVIEw) convertVIEw.findVIEwByID(R.ID.personImage); vIEwHolder.checkBox=(CheckBox)convertVIEw.findVIEwByID(R.ID.checkBox); convertVIEw.setTag(vIEwHolder); } else{ vIEwHolder = (VIEwHolder) convertVIEw.getTag(); } vIEwHolder.nameText.setText(data[position].getname()); vIEwHolder.surnameText.setText(data[position].getSurname()); vIEwHolder.contactimage.setimageResource(data[position].getPhotoRes()); vIEwHolder.contactimage.setScaleType(ScaleType.FIT_XY); vIEwHolder.checkBox.setChecked(checkBoxState[position]); vIEwHolder.checkBox.setonClickListener(new VIEw.OnClickListener() { public voID onClick(VIEw v) { if(((CheckBox)v).isChecked()){ checkBoxState[position]=true; data[position].setCheck(true); }else{ checkBoxState[position]=false; data[position].setCheck(false); } } }); return convertVIEw;}static class VIEwHolder { TextVIEw nameText; TextVIEw surnameText; ImageVIEw contactimage; CheckBox checkBox;} }
我看过这个教程来做我的getVIEw:http://androidcocktail.blogspot.it/2012/04/adding-checkboxes-to-custom-listview-in.html
解决方法 使用new甚至在方法中创建类时,您已为变量创建了不同的范围.换一种说法:// Creating a new scope here --> vvvvIEwHolder.checkBox.setonClickListener(new OnClickListener() { // Any variables not visible to the entire class,won't work properly in here! // (variables like: vIEwHolder,position,possibly data) public voID onClick(VIEw arg0) { if(vIEwHolder.checkBox.isChecked()==true) data[position].setCheck(true); else data[position].setCheck(false); } }); // Exited "new class'" scope 位置与您认为的位置不同.尝试保存位置值,您可以再次引用它:
vIEwHolder.checkBox = (CheckBox) convertVIEw.findVIEwByID(R.ID.checkBox);vIEwHolder.position = position;convertVIEw.setTag(vIEwHolder);...vIEwHolder.checkBox.setonClickListener(new OnClickListener() { public voID onClick(VIEw vIEw) { VIEwHolder vIEwHolder = (VIEwHolder) vIEw.getTag(); data[vIEwHolder.position].setCheck(vIEwHolder.checkBox.isChecked()); } }); 因为你正在处理CheckBox,我建议使用OnCheckedChangeListener.
但是,如果更改ChoiceMode,则可能不需要为ListVIEw行定义任何侦听器:
ListVIEw.setChoiceMode(ListVIEw.CHOICE_MODE_MulTIPLE);总结
以上是内存溢出为你收集整理的android – 滚动我的自定义ListView时,Checkbox丢失了检查值全部内容,希望文章能够帮你解决android – 滚动我的自定义ListView时,Checkbox丢失了检查值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)