我正在使用合并适配器(也称为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
现在,这段代码运行良好,但由于它有一个linearlayoutmanager,所有内容都将显示为LinearLayout,在其中,我的animalAdapter将不会按照我想要的方式显示。
有没有办法为不同的适配器设置不同的布局管理器,以我想要的方式显示数据?
3条答案
按热度按时间mccptt671#
事实上,我是这样解决的:
Mergeadapter / ConcatAdapter with Horizontal and Vertical Layouts
祝你好运
2w2cym1i2#
不,没有办法让多个
LayoutManager
与一个RecyclerView
关联。LayoutManager
是针对整个RecyclerView
的,而不是与Adapter
关联。换句话说:适配器没有布局管理器;取而代之的是,X1 M5 N1 X具有布局管理器,并且它还具有适配器。如果不是这种情况,那么如果在一行的中间从
GridLayoutManager
切换到LinearLayoutManager
,行为就会变得非常奇怪。对于您的特定方案,线性布局中的行(对于垂直列表)或列(对于水平列表)与跨度数等于跨度数的网格中的项目相同,因此,如果正确设置了跨度数,则只需对整个
RecyclerView
使用GridLayoutManager
即可。pdsfdshx3#
GridLayoutManager.setSpanSizeLookup
对于类似的情况非常有用。您可以使用GridLayoutManager,而不是使用多个布局管理器。例如,当我依次添加1个垂直对象、3个水平对象和4个垂直对象时,代码将如下所示: