版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16624353/article/details/62892645
最近用到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;
}
}
}