是否可以为不同的视图类型更改布局管理器?
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】:可以通过修改GridLayoutManager
的spanSizeLookup
来实现,即
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
,如答案所示以上是关于是否可以为不同的视图类型更改布局管理器?的主要内容,如果未能解决你的问题,请参考以下文章