1. 程式人生 > >問題排除:RecyclerView新增分割線後,每次下拉重新整理 Item與分割線間都會增加間距。

問題排除: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的最下方畫了一次。

解決方法很簡單,因為這就是粗心的問題

初始化資料之前就應該新增好分割線,以後每次下拉重新整理的邏輯中只新增介面卡,不管分隔條的事兒。
從下面移到上面就行了
從下面移到上面就行了