【问题标题】:One LinearLayoutManager is only for one RecyclerView?一个 LinearLayoutManager 只适用于一个 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 具有相同的属性对象。那么为什么我必须制作其他对象

标签: android android-recyclerview linearlayoutmanager


【解决方案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 实例
猜你喜欢
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
相关资源
最近更新 更多