項目場景:
RecyclerView使用GridLayoutManager時上拉加載更多遇到bug
例如:layoutManager = GridLayoutManager(context, 3),上拉加載更多調用adapter.loadMoreModule.loadMoreEnd()後,沒有更多資料直接作為一個item顯示在1/3的格子裡。
ps:這裡的adapter用的com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4
問題描述:
正常使用上拉加載更多時我們一般用LinearLayoutManager,上拉加載更多的狀态欄都是顯示在清單最底部。
但是當使用GridLayoutManager時,他顯示在最後一個position+1(list.size+1)的位置而不是顯示在清單最底部,這明顯不符合我們的需求,我們得把他改成顯示在清單的下方而不是顯示在最後一個position+1
原因分析:
深入研究了一下上拉加載更多的原理,其實是以footView的形式内部封裝的。
footView當然是顯示在最後一個position+1的位置沒毛病,隻是我們通常用的LinearLayoutManager,這個沒影響,隻是用到了GridLayoutManager時問題就浮出水了。
解決方案:
原來的layoutManager 是這樣設定的
把layoutManager 改成如下方式,判斷目前的position是不是footview的position,如果是讓他占滿一行,如果不是該是跟原需求一樣一行3列,就可以完美的解決問題了。
var manager = GridLayoutManager(context, 3)
manager.spanSizeLookup =
object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
if (list == null || list.size == 0)
return 3
return if (adapter.footerViewPosition == position) {
3
} else {
1
}
}
}
binding.rvBookshelf.layoutManager = manager