android – “LayoutManager已经附加到RecyclerView”错误

前端之家收集整理的这篇文章主要介绍了android – “LayoutManager已经附加到RecyclerView”错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在布局中有多个RecyclerViews,但是我收到以下错误:“LayoutManager已经附加到RecyclerView”

Java代码是:

  1. @Override
  2. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  3. // Inflate the layout for this fragment
  4. View view = inflater.inflate(R.layout.fragment_squad,container,false);
  5.  
  6. Activity parentActivity = getActivity();
  7. final ObservableScrollView scrollView = (ObservableScrollView) view.findViewById(R.id.squad_scrollview);
  8.  
  9. final RecyclerView gkRecyclerView = (RecyclerView) view.findViewById(R.id.gk_recycler);
  10. final RecyclerView coachRecyclerView = (RecyclerView) view.findViewById(R.id.coach_recycler);
  11.  
  12. coachRecyclerView.setAdapter(new SquadRecyclerAdapter(parentActivity,getSquadDummyData(0)));
  13. coachRecyclerView.setLayoutManager(new MyLinearLayoutManager(parentActivity,LinearLayoutManager.VERTICAL,false));
  14. coachRecyclerView.setHasFixedSize(false);
  15.  
  16. gkRecyclerView.setAdapter(new SquadRecyclerAdapter(parentActivity,getSquadDummyData(1)));
  17. gkRecyclerView.setLayoutManager(new MyLinearLayoutManager(parentActivity,false));
  18. gkRecyclerView.setHasFixedSize(false);
  19.  
  20. scrollView.setTouchInterceptionViewGroup((ViewGroup) parentActivity.findViewById(R.id.container));
  21.  
  22. if (parentActivity instanceof ObservableScrollViewCallbacks) {
  23. scrollView.setScrollViewCallbacks((ObservableScrollViewCallbacks) parentActivity);
  24. }
  25.  
  26. return view;
  27. }

XML布局代码是:

  1. <com.github.ksoichiro.android.observablescrollview.ObservableScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:id="@+id/squad_scrollview"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:layout_margin="@dimen/margin_medium"
  7. >
  8.  
  9. <LinearLayout
  10. android:id="@+id/squad_container"
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:background="@drawable/seasons_scrollview"
  14. android:divider="@drawable/nav_bar_divider"
  15. android:elevation="@dimen/card_elevation"
  16. android:orientation="vertical"
  17. android:showDividers="middle">
  18.  
  19. <LinearLayout
  20. android:id="@+id/coach_group"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:orientation="vertical"
  24. android:paddingBottom="@dimen/margin_small"
  25. android:paddingLeft="@dimen/margin_standard"
  26. android:paddingRight="@dimen/margin_standard"
  27. android:paddingTop="@dimen/margin_small">
  28.  
  29. <TextView
  30. android:id="@+id/squad_coach_header"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:text="Coach"
  34. android:textSize="@dimen/text_size_standard" />
  35.  
  36. <android.support.v7.widget.RecyclerView
  37. android:id="@+id/coach_recycler"
  38. android:layout_width="match_parent"
  39. android:layout_height="wrap_content"
  40. android:paddingTop="@dimen/margin_small"
  41. android:paddingBottom="@dimen/margin_small"
  42. android:scrollbars="none">
  43.  
  44. </android.support.v7.widget.RecyclerView>
  45.  
  46. </LinearLayout>
  47.  
  48. <LinearLayout
  49. android:id="@+id/gk_group"
  50. android:layout_width="match_parent"
  51. android:layout_height="wrap_content"
  52. android:orientation="vertical"
  53. android:paddingBottom="@dimen/margin_small"
  54. android:paddingLeft="@dimen/margin_standard"
  55. android:paddingRight="@dimen/margin_standard"
  56. android:paddingTop="@dimen/margin_small">
  57.  
  58. <TextView
  59. android:id="@+id/squad_gk_header"
  60. android:layout_width="wrap_content"
  61. android:layout_height="wrap_content"
  62. android:text="Goalkeepers"
  63. android:textSize="@dimen/text_size_standard" />
  64.  
  65. <android.support.v7.widget.RecyclerView
  66. android:id="@+id/gk_recycler"
  67. android:layout_width="match_parent"
  68. android:layout_height="wrap_content"
  69. android:paddingTop="@dimen/margin_small"
  70. android:paddingBottom="@dimen/margin_small"
  71. android:scrollbars="none">
  72.  
  73. </android.support.v7.widget.RecyclerView>
  74.  
  75. </LinearLayout>
  76.  
  77. <LinearLayout
  78. android:id="@+id/def_group"
  79. android:layout_width="match_parent"
  80. android:layout_height="wrap_content"
  81. android:orientation="vertical"
  82. android:paddingBottom="@dimen/margin_small"
  83. android:paddingLeft="@dimen/margin_standard"
  84. android:paddingRight="@dimen/margin_standard"
  85. android:paddingTop="@dimen/margin_small">
  86.  
  87. <TextView
  88. android:id="@+id/squad_def_header"
  89. android:layout_width="wrap_content"
  90. android:layout_height="wrap_content"
  91. android:text="Defense"
  92. android:textSize="@dimen/text_size_standard" />
  93.  
  94. </LinearLayout>
  95.  
  96. <LinearLayout
  97. android:id="@+id/mid_group"
  98. android:layout_width="match_parent"
  99. android:layout_height="wrap_content"
  100. android:orientation="vertical"
  101. android:paddingBottom="@dimen/margin_small"
  102. android:paddingLeft="@dimen/margin_standard"
  103. android:paddingRight="@dimen/margin_standard"
  104. android:paddingTop="@dimen/margin_small">
  105.  
  106. <TextView
  107. android:id="@+id/squad_mid_header"
  108. android:layout_width="wrap_content"
  109. android:layout_height="wrap_content"
  110. android:text="Midfielders"
  111. android:textSize="@dimen/text_size_standard" />
  112.  
  113. </LinearLayout>
  114.  
  115. <LinearLayout
  116. android:id="@+id/for_group"
  117. android:layout_width="match_parent"
  118. android:layout_height="wrap_content"
  119. android:orientation="vertical"
  120. android:paddingBottom="@dimen/margin_small"
  121. android:paddingLeft="@dimen/margin_standard"
  122. android:paddingRight="@dimen/margin_standard"
  123. android:paddingTop="@dimen/margin_small">
  124.  
  125. <TextView
  126. android:id="@+id/squad_for_header"
  127. android:layout_width="wrap_content"
  128. android:layout_height="wrap_content"
  129. android:text="Forwards"
  130. android:textSize="@dimen/text_size_standard" />
  131.  
  132. </LinearLayout>
  133.  
  134.  
  135. </LinearLayout>
  136.  
  137.  
  138. </com.github.ksoichiro.android.observablescrollview.ObservableScrollView>

MyLinearLayoutManager是我在线查找的自定义LinearLayoutManager,以解决SDK LinearLayoutManager的封装问题.

有什么办法可以在单个布局中有多个RecyclerViews?看来我每个布局不能附加多个LayoutManagers.

任何帮助将是非常欢迎:)

解决方法

我也有这个问题.我的活动使用Tabs,有三个片段,当我去第三个选项卡,并返回到第一个(或第二),这个错误被抛出.

搜索很多,我发现可能是垃圾收集器,因为我使用了强大的参考.

由于构造函数LinearLayoutManager使用活动作为参数(而不是片段),所以Tab键活动在选项卡更改期间保持活动状态.

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

之前:

  1. public class MyFragment1 extends Fragment
  2. private LinearLayoutManager linearLayoutManager;
  3.  
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. linearLayoutManager = new LinearLayoutManager(getActivity());
  7. (...)
  8. }
  9.  
  10. @Override
  11. public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
  12. (...)
  13. mRecyclerView.setLayoutManager(linearLayoutManager);
  14. }
  15. }

我改为:

  1. public class MyFragment1 extends Fragment {
  2. // private LinearLayoutManager linearLayoutManager;
  3.  
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. // linearLayoutManager = new LinearLayoutManager(getActivity());
  7. (...)
  8. }
  9.  
  10. @Override
  11. public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
  12. (...)
  13. mRecyclerView.setLayoutManager(
  14. new LinearLayoutManager(getActivity()));
  15. }
  16. }

猜你在找的Android相关文章