天天看點

RecyclerView使用GridLayoutManager時上拉加載更多遇到bug項目場景:問題描述:原因分析:解決方案:

項目場景:

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
           

繼續閱讀