有时在ListView与GridView中绑定视图的时候,会出现错位现象,比如一个ListView或GridView中Iten包含一个CheckBox,当勾选其中几个CheckBox,然后快速滑动的时候,会发现勾选的CheckBox错位了,当然在getView要采用缓存方式,有两种方式解决:
1.在getView()中判断的时候,判断语句必须写完整,不能偷懒,比如:
if(orders.get(position).getShowExcuteBoutton().equals("1")){
holder.getDone_btn().setVisibility(View.VISIBLE);
holder.getDetail_btn().setVisibility(View.VISIBLE);
}
此处做的判断是当Button的状态为1时,隐藏两个按钮,否则就不隐藏(布局中状态为GONE),看起来没错,但是当数据多了快速滑动也会出现显示的Button错位的现象,所以必须写完整,如下:
if(orders.get(position).getShowExcuteBoutton().equals("1")){
holder.getDone_btn().setVisibility(View.VISIBLE);
holder.getDetail_btn().setVisibility(View.VISIBLE);
}else{
holder.getDone_btn().setVisibility(View.GONE);
holder.getDetail_btn().setVisibility(View.GONE);
}
2.如果第一种方法不能解决,可以使用这种方法,就是自定义一个ListView或者GridView,设置其不滑动,然后外层包裹一个ScrollView,用ScrollView代替滑动,这样就能解决滑动错位的现象了,ListView或GridView只需要重写一个方法就可以,代码如下:public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}