最近用到multitype的场景比较多,基本上,用到recyclerview就需要用到Multitype,因为很方便。。。。但是在给myltitype的item设置间距的时候遇到了一些问题,因为排列是不规则的,所以想要指定一些item的间距,需要设置一下。。。
先上效果图。。
这里每个switchbar的一行,每个标题一行,每个图片,都是一种Item,但是我需要对图片设置item,这里需要用到recyclerview的ItemDecoration。。。。我们需要自定义一个类来
实现这个ItemDecoration,但是如果根据里面的方法,是通过position来设置间距的,会出现一个问题,就是view的复用,导致第一次加载时是正确的,但是拉到最后再往上的时候,view的复用,导致position错乱了,所以间距全乱了。。。
解决的方法是,把位置穿进去,然后进行判断和设置,具体代码如下。。。
public class MyItemDecoration extends RecyclerView.ItemDecoration{ private int space; Items items; List<Integer> TitlePosition; int title1; int title2; int title3; public MyItemDecoration(int space) { this.space = space; } void setData(Items items,List<Integer> TitlePosition) { this.items = items; this.TitlePosition = TitlePosition; title1 = TitlePosition.get(0); title2 = TitlePosition.get(1); title3 = TitlePosition.get(2); } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildLayoutPosition(view); if(position > title1 && position <title2) { setDecoration(position,title1,outRect); }else if(position >title2 && position <title3) { setDecoration(position,title2,outRect); }else if(position >title3) { setDecoration(position,title3,outRect); } } public void setDecoration(int position,int titlePosition,Rect outRect) { outRect.left = space; if((position-titlePosition) % 5 == 0) { outRect.right = space; } } }