1. 程式人生 > >安卓瀑布流錯亂 滑動閃爍 頂部留白 的解決方案

安卓瀑布流錯亂 滑動閃爍 頂部留白 的解決方案

基本上網上給出的解決問題方案為:

  1. layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE)  
  2.  
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            manager.invalidateSpanAssignments(); //防止第一行到頂部有空白區域
        }
    });

以上程式碼給LayoutManager和Recycleview設定之後的確可以解決部分問題,但是依然存在著頂部item留白錯亂的問題,雖然在onScrollStateChanged中動態的去重新計算了高度 但是效果依然不盡人意。

其實在呼叫invalidateSpanAssignments的同時就決定了,只要是觸控滑動那麼頁面會進行重新測量繪製,因此導致在回到頂部 或者 滑動過程中依然有item的位置會變化 頂部有留白因此該方法不能呼叫

有人提出, 用IntentService中來寫程式碼塊,使用第三方圖片載入框架例如Glide的asBitmap來預先獲取圖片的Bitmap同時將寬高儲存賦予實體類,這種情況在後臺不提供圖片的寬高時,只有使用該方法,但是該方法的效率較低

實際上解決錯亂與留白的問題 主要原因在於載入更多資料之後 使用的是 adapter.notifyDataSetChanged(); 該方法將重新整理一整個Recycleview的資料 將 adapter.notifyDataSetChanged(); 替換成 notifyItemRangeInserted(int positionStart, int itemCount)進行新增資料底部區域性重新整理即可

廢話這麼多 解決辦法就三步

1:layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE)  

2:根據圖片寬高設定佈局ImageView的LayoutParams

3:懶得去理這些介面卡的問題就去https://github.com/CymChad/BaseRecyclerViewAdapterHelper 新增一個介面卡依賴

在重新整理資料時使用 adapter.setNewData(resultData);,載入更多資料時使用 adapter.addData(resultData);