是否可以为不同的视图类型更改布局管理器?
Is it posible to change layoutmanager for a different viewtype?
实际上我有两个视图类型,一个 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)
总而言之,我需要的是视图类型 1 显示一个 LinearLayoutManager,视图类型 0 显示一个 GridLayoutManager
您可以通过修改 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
实际上我有两个视图类型,一个 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)
总而言之,我需要的是视图类型 1 显示一个 LinearLayoutManager,视图类型 0 显示一个 GridLayoutManager
您可以通过修改 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