【问题标题】: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

【问题讨论】:

    标签: android kotlin android-recyclerview android-adapter


    【解决方案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,如答案所示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2012-03-19
    • 2015-05-20
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多