一个 LinearLayoutManager 只适用于一个 RecyclerView?
Posted
技术标签:
【中文标题】一个 LinearLayoutManager 只适用于一个 RecyclerView?【英文标题】:One LinearLayoutManager is only for one RecyclerView? 【发布时间】:2016-08-14 11:34:46 【问题描述】:我正在构建一个在一个片段中包含三个 RecyclerView 的应用程序,以显示项目的水平列表。我创建了一个 LinearLayoutManager 对象并将其设置为所有三个 RecyclerView 。但它使应用程序崩溃,说一个 LinearLayoutManager 只能附加到一个 RecyclerView 。为什么我不能附加到所有虽然我需要相同的属性。 代码是..
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
recViewTopSell.setLayoutManager(llm);
recViewBrands.setLayoutManager(llm);
recViewCategory.setLayoutManager(llm);
错误
recViewBrands.setLayoutManager(llm);
recViewCategory.setLayoutManager(llm);
【问题讨论】:
您不能将同一个布局管理器附加到多个回收站视图。 为什么?我在问为什么我不能附上。它只是一个具有属性的对象,我希望其他 RecyclerView 具有相同的属性对象。那么为什么我必须制作其他对象 【参考方案1】:不,它不能像那样重复使用。
在您的情况下,LayoutManager
、LinearLayoutManager
包含特定于与它一起使用的 RecyclerView 的状态。
如果三个不同的 LayoutManger 涉及大量设置,请考虑使用 createLayoutManager()
方法调用三次。
【讨论】:
createLayoutManager()的使用方法 这将是您自己创建和设置 LinearLayoutManager 的新实例的方法【参考方案2】:按照马蒂亚斯的回答这样做:
recViewTopSell.setLayoutManager(newLLM());
recViewBrands.setLayoutManager(newLLM());
recViewCategory.setLayoutManager(newLLM());
然后:
private LinearLayoutManager newLLM()
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
return linearLayoutManager;
【讨论】:
我知道这可以做到,但为什么我要实例化三个 LinearLayoutManager 对象。 因为它在回收旧视图时可以访问 Recycler 实例以上是关于一个 LinearLayoutManager 只适用于一个 RecyclerView?的主要内容,如果未能解决你的问题,请参考以下文章
手机旋转后 LinearLayoutManager setOrientation 不起作用
Android LinearLayoutManager#getChildAt(int) 返回 null
RecyclerView布局管理器的使用-LinearLayoutManager的setStackFromEnd(boolean stackFromEnd)方法
水平 RecyclerView 内的水平 RecyclerView