Android multitype Recyclerview 设置间距 itemdecoration

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
        }
    }
}




猜你喜欢

转载自blog.csdn.net/qq_16624353/article/details/62892645
今日推荐