“LayoutManager is already attached to a RecyclerView” error

I am trying to have multiple RecyclerViews in a layout but I get the following error: “LayoutManager is already attached to a RecyclerView”

The Java code is:

  • Android: what is the difference between resolution and density?
  • Android : java.lang.OutOfMemoryError:
  • Android: EditText in Dialog doesn't pull up soft keyboard
  • Where is the Android SDK folder located?
  • Retain the Fragment object while rotating
  • Method breakpoints may dramatically slow down debugging
  • @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;
    }
    

    The XML layout code is:

    <com.github.ksoichiro.android.observablescrollview.ObservableScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/squad_scrollview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="@dimen/margin_medium"
        >
    
        <LinearLayout
            android:id="@+id/squad_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/seasons_scrollview"
            android:divider="@drawable/nav_bar_divider"
            android:elevation="@dimen/card_elevation"
            android:orientation="vertical"
            android:showDividers="middle">
    
            <LinearLayout
                android:id="@+id/coach_group"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="@dimen/margin_small"
                android:paddingLeft="@dimen/margin_standard"
                android:paddingRight="@dimen/margin_standard"
                android:paddingTop="@dimen/margin_small">
    
                <TextView
                    android:id="@+id/squad_coach_header"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Coach"
                    android:textSize="@dimen/text_size_standard" />
    
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/coach_recycler"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:paddingTop="@dimen/margin_small"
                    android:paddingBottom="@dimen/margin_small"
                    android:scrollbars="none">
    
                </android.support.v7.widget.RecyclerView>
    
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/gk_group"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="@dimen/margin_small"
                android:paddingLeft="@dimen/margin_standard"
                android:paddingRight="@dimen/margin_standard"
                android:paddingTop="@dimen/margin_small">
    
                <TextView
                    android:id="@+id/squad_gk_header"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Goalkeepers"
                    android:textSize="@dimen/text_size_standard" />
    
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/gk_recycler"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:paddingTop="@dimen/margin_small"
                    android:paddingBottom="@dimen/margin_small"
                    android:scrollbars="none">
    
                </android.support.v7.widget.RecyclerView>
    
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/def_group"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="@dimen/margin_small"
                android:paddingLeft="@dimen/margin_standard"
                android:paddingRight="@dimen/margin_standard"
                android:paddingTop="@dimen/margin_small">
    
                <TextView
                    android:id="@+id/squad_def_header"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Defense"
                    android:textSize="@dimen/text_size_standard" />
    
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/mid_group"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="@dimen/margin_small"
                android:paddingLeft="@dimen/margin_standard"
                android:paddingRight="@dimen/margin_standard"
                android:paddingTop="@dimen/margin_small">
    
                <TextView
                    android:id="@+id/squad_mid_header"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Midfielders"
                    android:textSize="@dimen/text_size_standard" />
    
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/for_group"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="@dimen/margin_small"
                android:paddingLeft="@dimen/margin_standard"
                android:paddingRight="@dimen/margin_standard"
                android:paddingTop="@dimen/margin_small">
    
                <TextView
                    android:id="@+id/squad_for_header"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Forwards"
                    android:textSize="@dimen/text_size_standard" />
    
            </LinearLayout>
    
    
        </LinearLayout>
    
    
    </com.github.ksoichiro.android.observablescrollview.ObservableScrollView>
    

    The MyLinearLayoutManager is a custom LinearLayoutManager I found online in order to solve the wrap-content issue of the SDK LinearLayoutManager.

    Is there any way I can have multiple RecyclerViews in a single layout? It seems that I cannot attach more than one LayoutManagers per layout.

    Any assistance would be very welcome 🙂

    Related posts:

    How do I fix &ldquo;Failed to sync vcpu reg&rdquo; error?
    How to know when an Android ListView is done being populated
    Storage Access Framework in test app
    Android: Using WebView outside an Activity context
    Cordova / Phonegap Android - Java / Ant Issue on build?
    How to deal with width inconsistency between android 4.0-4.3 and 4.4 on Cordova or Phonegap?
  • Show a dialog in `Thread.setDefaultUncaughtExceptionHandler`
  • Scroll to a specific view in scroll view
  • Android fill_parent to match_parent
  • Getting GMT time with Android
  • Android Layout background alpha
  • How to get complete address from latitude and longitude?
  • 3 Solutions collect form web for ““LayoutManager is already attached to a RecyclerView” error”

    I had this problem too. My Activity uses Tabs, with three fragments, when I go to third tab, and back to first (or second), this error is thrown.

    After searching a lot, I found out that may be the garbage collector, because I was using a strong reference.

    Since the constructor LinearLayoutManager uses the activity as the parameter (not the fragment), a Tabs Activity stays active during tabs changes.

    Removing the local field in mLinearLayoutManager from the class, and using a weak reference, I could get rid of this problem:

    before:

    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);
        }
    }
    

    I changed to:

    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()));
        }
    }
    

    I have the same problem as well. I work around it by setting null to LinearLayoutManager instance.

    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;
    }
    

    I solved the issue (in case someone faces it again) by following these steps:

    Clean project

    Rebuild project

    Invalidate caches

    After that I compiled again and it run like a charm

    PS: I don’t know which one of the three steps above did the trick, since I tried them all at once before compiling. If someone faces it again and tries these steps one at a time, please post which step in particular is the solution to the issue.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.