“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。

非常欢迎任何帮助:)

Related of "“LayoutManager已附加到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:我不知道上面三个步骤中的哪一个做了这个伎俩,因为我在编译之前一次尝试了所有这些步骤。 如果有人再次面对它并一次尝试这些步骤,请发布哪个步骤特别是问题的解决方案。