天天看点

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

问题介绍

  • 每次启动的时候是正常显示的,看不出来问题,如下图:
    问题排除:RecyclerView添加分割线后,每次下拉刷新 Item与分割线间都会增加间距。
  • 下拉刷新一次就会有一个间距,这里为了看清楚,我把Item的背景设成了灰色:
    问题排除:RecyclerView添加分割线后,每次下拉刷新 Item与分割线间都会增加间距。
  • 下面是刷新多次的效果:
    问题排除:RecyclerView添加分割线后,每次下拉刷新 Item与分割线间都会增加间距。
  • 这里实现分割线我用的是以下代码实现:

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

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

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

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

就是这个原因。

呢么我是哪里出了问题呢, 怎么会反复增加高度呢?直接看下拉刷新中的代码,里面只有initview();

initview();中为RecyclerView添加了画线。所以每刷新一次就会添加一次划线。就产生了布局中间有一个划线的距离的问题。

那么为什么没有画两条线呢?

首先根据看的源代码明白:Item的高度+=分割线的高度,然后把分割线画到Item的最下面(分割线的底 = Item的底)。线的高度是由xml文件指定的,是固定的。

所以每当添加一次DividerItemDecoration,Item的高度就会+=分割线的高度。所以只是Item高度增加了,但是线却只是在Item的最下方画了一次。

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

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

从下面移到上面就行了

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

继续阅读