Android multitype Recyclerview 设置间距 itemdecoration

最近用到multitype的场景比较多,基本上,用到recyclerview就需要用到Multitype,因为很方便。。。。但是在给myltitype的item设置间距的时候遇到了一些问题,因为排列是不规则的,所以想要指定一些item的间距,需要设置一下。。。


先上效果图。。


Android multitype Recyclerview 设置间距 itemdecoration_第1张图片



这里每个switchbar的一行,每个标题一行,每个图片,都是一种Item,但是我需要对图片设置item,这里需要用到recyclerview的ItemDecoration。。。。我们需要自定义一个类来

实现这个ItemDecoration,但是如果根据里面的方法,是通过position来设置间距的,会出现一个问题,就是view的复用,导致第一次加载时是正确的,但是拉到最后再往上的时候,view的复用,导致position错乱了,所以间距全乱了。。。


解决的方法是,把位置穿进去,然后进行判断和设置,具体代码如下。。。

public class MyItemDecoration extends RecyclerView.ItemDecoration{
    private int space;
    Items items;
    List TitlePosition;
    int title1;
    int title2;
    int title3;

    public MyItemDecoration(int space) {
        this.space = space;
    }

    void setData(Items items,List 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 && 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;
        }
    }
}




你可能感兴趣的:(Android multitype Recyclerview 设置间距 itemdecoration)