RecyclerView表格和瀑布流布局单独占满一行实现

一、前言

在使用RecyclerView多布局的时候,我们经常会遇到这样的界面,上面多个不固定位置的布局,下面是一个固定的2列瀑布流布局列表。有的小伙伴们估计把下面的瀑布流布局,单独用Recyclerview作为item,或者单独拧出来。前者大概率有事件冲突,而且数据也不好处理;后者失去了多布局的意义。我们有更简洁的方法,整个布局使用瀑布流布局,上面的多个布局,每个实现单独占一行

二、具体实现

这里介绍RecyclerView两种管理器实现独占一行的实现,表格布局实现(GridLayoutManager)和我们上面说的瀑布流布局(StaggeredGridLayoutManager),主要都是用布局管理器实现

  • 表格布局(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列的表格布局,下标为3的倍数的item独占一行。注意:这里返回的3,意思是这个item占3列,1就是正常的占一列

  • 瀑布流布局(StaggeredGridLayoutManager)
    这里直接可以在adapter中的onViewAttachedToWindow下面实现,上面的表格布局也一样可在这里实现
    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
            }
        }
    }

 

你可能感兴趣的:(Android,面试,前端,html,css,前端)