有没有办法在 RecyclerView 中将多个 LayoutManager 与 MergeAdapter 一起使用?

SNM*_*SNM 5 android android-adapter android-fragments kotlin android-recyclerview

我正在使用 MergeAdapter(又名 ConcatAdapter)

https://medium.com/androiddevelopers/merge-adapters-sequentially-with-mergeadapter-294d2942127a

但我需要做的是,第一个适配器应显示网格布局,第二个适配器应显示线性布局,所以,如果我这样做

 val headerAdapter = HeaderAdapter(requireContext(), Header("TestHeader"))
        val dividerViewAdapter = DividerViewAdapter(requireContext())
        val animalAdapter = DividerViewAdapter(requireContext(),DataSource.animalList) // -> this should be shown as a GridLayout
        val mergeAdapter = MergeAdapter(headerAdapter,dividerViewAdapter,animalAdapter)
        test_rv.layoutManager = LinearLayoutManager(requireContext())
        test_rv.adapter = mergeAdapter
Run Code Online (Sandbox Code Playgroud)

现在这段代码工作正常,但由于它有一个 Linearlayoutmanager,所有内容都将显示为 LinearLayout,其中我的 AnimalAdapter 将不会按我想要的方式显示。

无论如何,是否可以为不同的适配器设置不同的布局管理器,以按照我想要的方式显示数据?

Rya*_*ley 1

不,没有办法将多个LayoutManagers 与一个关联RecyclerView。TheLayoutManager代表整个RecyclerView,与 无关Adapter。换句话说:适配器没有布局管理器;相反,它RecyclerView有一个布局管理器,它还有一个适配器。

如果不是这种情况,例如,如果它在一行中间从 a 切换GridLayoutManager到 a ,则行为会变得非常奇怪。LinearLayoutManager

对于您的特定场景,线性布局中的行(对于垂直列表)或列(对于水平列表)与网格中的项目相同,其跨度计数等于跨度数,因此您可以简单地使用如果正确设置了跨度计数,则aGridLayoutManager代表整个。RecyclerView