一个 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】:

不,它不能像那样重复使用。 在您的情况下,LayoutManagerLinearLayoutManager 包含特定于与它一起使用的 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

RecyclerView系列之七:LayoutManager

仿抖音上下滑动播放视频