100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【转】Android:ListView常见错位之CheckBox错位

【转】Android:ListView常见错位之CheckBox错位

时间:2022-01-13 05:27:47

相关推荐

【转】Android:ListView常见错位之CheckBox错位

原文网址:/lemon_tree12138/article/details/39337867

ListView在什么样的情况下会出现错位?错位的原因是什么?怎么解决?下面的内容会对这些问题做一个讲解。

1.ListView在什么样的情况下会出现错位?

其实错位是当我们的ListView的每个单项(item)从屏幕中移入或是移出,我们的系统会对这个item的状态进行重新定义——是否被选中等等。一般只是显示的情况下,我们的ListView很少出现错位,因为状态没有改变。

我们现在就是拿一个CheckBox组件来说明,因为CheckBox是一个比较基础的换件,而且CheckBox的状态改变比较明显。

例如下面这种情况:

初始界面中选中第0个和第1个:

当我们对屏幕进行滑动再回来的时候,我们会看到,第0个的CheckBox的勾不见了。第9个的CheckBox出现了勾,这是个就是错位。

也就是说我们在重新加载由屏幕之外的item移到屏幕之内时,CheckBox的状态发生改变。

如是,我们想是不是有一种方法来记录这种变化,且变化只是在监听器监听到有需要改变的状态发生时,才会变化。

这里我们用一个ArrayList<Boolean>的数组来记录。

关键代码如下:

[java]view plaincopyprint? publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent){ViewHolderviewHolder=null;if(recordMap.get(position)==null){convertView=mInflater.inflate(R.layout.listview_item,null);viewHolder=newViewHolder(convertView);Log.i(TAG,"1:"+position);finalintfinalP=position;recordMap.put(position,convertView);viewHolder.checkBox.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){CheckBoxcheckBox=(CheckBox)v;isChecked.set(finalP,checkBox.isChecked());}});convertView.setTag(viewHolder);}else{Log.i(TAG,"2:"+position);convertView=recordMap.get(position);viewHolder=(ViewHolder)convertView.getTag();}viewHolder.button.setText("click"+position);viewHolder.checkBox.setChecked(isChecked.get(position));returnconvertView;}

-----------------------------------------------程序源码下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。