問題排除:RecyclerView新增分割線後,每次下拉重新整理 Item與分割線間都會增加間距。
阿新 • • 發佈:2019-02-02
問題介紹
每次啟動的時候是正常顯示的,看不出來問題,如下圖:
下拉重新整理一次就會有一個間距,這裡為了看清楚,我把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的最下方畫了一次。
解決方法很簡單,因為這就是粗心的問題
初始化資料之前就應該新增好分割線,以後每次下拉重新整理的邏輯中只新增介面卡,不管分隔條的事兒。
從下面移到上面就行了