问题介绍
- 每次启动的时候是正常显示的,看不出来问题,如下图:
- 下拉刷新一次就会有一个间距,这里为了看清楚,我把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的最下方画了一次。
解决方法很简单,因为这就是粗心的问题
初始化数据之前就应该添加好分割线,以后每次下拉刷新的逻辑中只添加适配器,不管分隔条的事儿。
从下面移到上面就行了