ListView或GridView快速滑动View错位解决办法

来源:互联网 发布:java编程思想4 mobi 编辑:程序博客网 时间:2024/05/16 07:01
有时在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);        }  


原创粉丝点击