是否可以为不同的视图类型更改布局管理器?

Posted

技术标签:

【中文标题】是否可以为不同的视图类型更改布局管理器?【英文标题】:Is it posible to change layoutmanager for a different viewtype? 【发布时间】:2022-01-06 17:06:53 【问题描述】:

实际上我有两种视图类型,一个recyclerview 以gridLayout 方式显示元素。

问题是网格中的其中一个元素应该以线性布局方面水平显示,而其他元素则作为网格显示。

我该如何管理?

override fun getItemViewType(position: Int): Int 
        return if(position %5 == 0) 1 else 0
    

这是我的回收站视图

binding.rv_mylist.adapter = TestAdapter()
binding.rv_mylist.layoutManager = GridLayoutManager(requireContext(), 3)

总之,我需要的是 viewtype 1 显示带有 LinearLayoutManager 和 viewtype 0 带有 GridLayoutManager

【问题讨论】:

【参考方案1】:

可以通过修改GridLayoutManagerspanSizeLookup来实现,即

layoutManager = GridLayoutManager(activity, 2).apply 
    spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() 
        override fun getSpanSize(position: Int): Int 
            return when(adapter.getItemViewType(position)) 
                 Type.Linear -> 1
                 Type.Grid -> 2
                 else -> 1
            
        
    )

recyclerView.layoutManager = layoutManager

【讨论】:

无法解析“类型”,这里需要使用哪个依赖 嗯,它是自制类,你可以根据getItemViewType()输出替换成你喜欢的任何东西 但是是否可以将 Gridlayout 管理器用于 Linearlayout 管理器。请建议。我正在使用 ExpendableRecyclerview 好吧,可以改用 GridLayoutManager 并修改spanSizeLookup,如答案所示

以上是关于是否可以为不同的视图类型更改布局管理器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从线性布局管理器访问新添加的视图

obiee 11g 使用目录管理器提取分析的布局和视图

C++:MFC属性管理器、资源视图的布局不小心给搞乱了,怎么恢复

每个容器都有一个布局管理器

使用布局管理器管理不同大小的不同小部件

具有回收器视图的线性布局管理器不反转