问题排除:RecyclerView添加分割线后,每次下拉刷新 Item与分割线间都会增加间距。

问题介绍

  • 每次启动的时候是正常显示的,看不出来问题,如下图:
    首起启动是正常的

  • 下拉刷新一次就会有一个间距,这里为了看清楚,我把Item的背景设成了灰色:刷新一次

  • 下面是刷新多次的效果:
    刷新多次

  • 这里实现分割线我用的是以下代码实现:

 mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL));

实在是挠头,后来发现好像每次刷新都会增加一个 分隔条 的高度

  • 刷新前:

图片说明

  • 刷新后:
    图片说明

真是在我想要放弃的时候看到希望了。上面情况说明是不断的增加一个分隔条的高度,检查看划线的源代码:

/**
     *  获取Item偏移量
     *    此方法是为每个Item四周预留出空间,从而让分隔线的绘制在预留的空间内
     */
   @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
            RecyclerView.State state) {
        if (mOrientation == VERTICAL) {//竖直方向的分隔线:item向下偏移一个分隔线的高度
            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
        } else {//水平方向的分隔线:item向右偏移一个分隔线的宽度
            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
        }
    }

就是这个原因。
呢么我是哪里出了问题呢, 怎么会反复增加高度呢?直接看下拉刷新中的代码,里面只有initview();
initview();中为RecyclerView添加了画线。所以每刷新一次就会添加一次划线。就产生了布局中间有一个划线的距离的问题。

那么为什么没有画两条线呢?
首先根据看的源代码明白:Item的高度+=分割线的高度,然后把分割线画到Item的最下面(分割线的底 = Item的底)。线的高度是由xml文件指定的,是固定的。
所以每当添加一次DividerItemDecoration,Item的高度就会+=分割线的高度。所以只是Item高度增加了,但是线却只是在Item的最下方画了一次。

解决方法很简单,因为这就是粗心的问题

初始化数据之前就应该添加好分割线,以后每次下拉刷新的逻辑中只添加适配器,不管分隔条的事儿。
从下面移到上面就行了
从下面移到上面就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值