一个LinearLayoutManager只能用于一个RecyclerView吗?

3

我正在构建一个应用程序,在一个片段中有三个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);

您不能将相同的布局管理器附加到多个回收视图。 - David Medenjak
为什么?我在问为什么我不能附加它。它只是一个具有属性的对象,我想要同样属性的对象放在其他RecyclerView中。那么为什么我还要创建其他对象呢? - Adnan Ali
2个回答

0

不,它不能像那样被重复使用。 LayoutManager,在你的情况下是LinearLayoutManager,包含特定于RecyclerView的状态。

如果为三个不同的LayoutManager涉及大量设置,请考虑创建一个createLayoutManager()方法来调用三次。


如何使用createLayoutManager()函数。 - Adnan Ali
这将是您自己的方法,创建并设置新的LinearLayoutManager实例。 - Mattias Isegran Bergander

-1

按照Mattias的回答做:

    recViewTopSell.setLayoutManager(newLLM());
    recViewBrands.setLayoutManager(newLLM());
    recViewCategory.setLayoutManager(newLLM());

然后:

    private LinearLayoutManager newLLM() {
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        return linearLayoutManager;
    }

我知道这是可以做到的,但为什么要实例化三个LinearLayoutManager对象呢? - Adnan Ali
因为在回收旧视图时,它被赋予了访问 Recycler 实例的权限。 - Nongthonbam Tonthoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接