RecyclerView表格和瀑布流布局單獨占滿一行實現(xiàn)

一、前言

在使用RecyclerView多布局的時候,我們經(jīng)常會遇到這樣的界面,上面多個不固定位置的布局,下面是一個固定的2列瀑布流布局列表。有的小伙伴們估計把下面的瀑布流布局,單獨用Recyclerview作為item,或者單獨擰出來。前者大概率有事件沖突,而且數(shù)據(jù)也不好處理;后者失去了多布局的意義。我們有更簡潔的方法,整個布局使用瀑布流布局,上面的多個布局,每個實現(xiàn)單獨占一行

二、具體實現(xiàn)

這里介紹RecyclerView兩種管理器實現(xiàn)獨占一行的實現(xiàn),表格布局實現(xiàn)(GridLayoutManager)和我們上面說的瀑布流布局(StaggeredGridLayoutManager),主要都是用布局管理器實現(xiàn)

  • 表格布局(GridLayoutManager)
        val gridLayoutManager = GridLayoutManager(this, 3)
        gridLayoutManager.spanSizeLookup = object : SpanSizeLookup() {
            override fun getSpanSize(position: Int): Int {
                return if (position == position % 3) {
                    3
                } else {
                    1
                }
            }
        }

上面是一個3列的表格布局,下標(biāo)為3的倍數(shù)的item獨占一行。注意:這里返回的3,意思是這個item占3列,1就是正常的占一列

  • 瀑布流布局(StaggeredGridLayoutManager)
    這里直接可以在adapter中的onViewAttachedToWindow下面實現(xiàn),上面的表格布局也一樣可在這里實現(xiàn)
    override fun onViewAttachedToWindow(holder: ViewHolder) {
        super.onViewAttachedToWindow(holder)
        val type = holder.itemViewType
        if (type == 1 || type == 2 || type == 3){
            val lp = holder.itemView.layoutParams
            if (lp is StaggeredGridLayoutManager.LayoutParams) {
                lp.isFullSpan = true
            }
        }
    }

上面代碼表示多布局類型為1、2、3的item獨占一行,主要設(shè)置lp.isFullSpan = true

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容