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

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

您可以通过修改 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