Android multitype Recyclerview 设置间距 itemdecoration

最近用到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;
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值