“LayoutManager已附加到RecyclerView”错误

我试图在布局中有多个RecyclerViews但我收到以下错误:“LayoutManager已经附加到RecyclerView”

Java代码是:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_squad, container, false); Activity parentActivity = getActivity(); final ObservableScrollView scrollView = (ObservableScrollView) view.findViewById(R.id.squad_scrollview); final RecyclerView gkRecyclerView = (RecyclerView) view.findViewById(R.id.gk_recycler); final RecyclerView coachRecyclerView = (RecyclerView) view.findViewById(R.id.coach_recycler); coachRecyclerView.setAdapter(new SquadRecyclerAdapter(parentActivity, getSquadDummyData(0))); coachRecyclerView.setLayoutManager(new MyLinearLayoutManager(parentActivity, LinearLayoutManager.VERTICAL, false)); coachRecyclerView.setHasFixedSize(false); gkRecyclerView.setAdapter(new SquadRecyclerAdapter(parentActivity, getSquadDummyData(1))); gkRecyclerView.setLayoutManager(new MyLinearLayoutManager(parentActivity, LinearLayoutManager.VERTICAL, false)); gkRecyclerView.setHasFixedSize(false); scrollView.setTouchInterceptionViewGroup((ViewGroup) parentActivity.findViewById(R.id.container)); if (parentActivity instanceof ObservableScrollViewCallbacks) { scrollView.setScrollViewCallbacks((ObservableScrollViewCallbacks) parentActivity); } return view; } 

XML布局代码是:

                        

MyLinearLayoutManager是我在网上find的自定义LinearLayoutManager,用于解决SDK LinearLayoutManager的包装内容问题。

有什么方法可以在一个布局中拥有多个RecyclerViews吗? 似乎我不能为每个布局附加多个LayoutManagers。

非常欢迎任何帮助:)

  • 像HotStar App这样的布局
  • RecyclerView在最后一项之后删除分隔符/装饰器
  • RecyclerView scrollToPosition不触发scrollListener
  • 如何在Google plus / Google报亭上滚动回收视图?
  • 如何在RecyclerView中使用ItemAnimator?
  • 处理项目长按回收者视图
  • RecyclerView里面的CardView有额外的边距
  • RecyclerView - 滚动到每次都不起作用的位置
  • 我也有这个问题。 我的活动使用带有三个片段的Tabs,当我转到第三个标签,然后回到第一个(或第二个)时,会抛出此错误。

    经过大量搜索后,我发现可能是垃圾收集器,因为我使用的是强引用。

    由于构造函数LinearLayoutManager使用activity作为参数(而不是片段),因此Tabs Activity在制表符更改期间保持活动状态。

    从类中删除mLinearLayoutManager中的本地字段,并使用弱引用,我可以摆脱这个问题:

    之前:

     public class MyFragment1 extends Fragment private LinearLayoutManager linearLayoutManager; @Override public void onCreate(Bundle savedInstanceState) { linearLayoutManager = new LinearLayoutManager(getActivity()); (...) } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { (...) mRecyclerView.setLayoutManager(linearLayoutManager); } } 

    我改为:

     public class MyFragment1 extends Fragment { // private LinearLayoutManager linearLayoutManager; @Override public void onCreate(Bundle savedInstanceState) { // linearLayoutManager = new LinearLayoutManager(getActivity()); (...) } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { (...) mRecyclerView.setLayoutManager( new LinearLayoutManager(getActivity())); } } 

    只需要创建一个新实例:

     RecyclerView recyclerView = new RecyclerView(getContext()); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())) 

    我也有同样的问题。 我通过将null设置为LinearLayoutManager实例来解决它。

     public class MyFragment extends Fragment { protected LinearLayoutManager mLinearLayoutManager; ... @Override public void onDestroy() { super.onDestroy(); if(mLinearLayoutManager != null) // Workaround: android.support.v7.widget.LinearLayoutManager is already attached to a RecyclerView mLinearLayoutManager = null; } 

    我通过以下步骤解决了问题(如果有人再次面对它):

    清洁项目

    重建项目

    使缓存无效

    之后我再次编译,它就像一个魅力

    PS:我不知道上面三个步骤中的哪一个做了这个伎俩,因为我在编译之前一次尝试了所有这些步骤。 如果有人再次面对它并一次尝试这些步骤,请发布哪个步骤特别是问题的解决方案。