• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps ERROR: Layout Manager already attach to RecyclerView

Nexust

Lurker
May 5, 2015
2
0
Hello, greeting to all developer.

I have problem with my project. I created a view pager (using VPI) in a fragment. The View Pager have 3 tab with a fragment each of tab. In that fragment i put recycle view. The problem comes when I switch fragment from my view pager fragment to another fragment with "addToBackStack" and when i "popBackStack", comes an exception "LinearLayoutManager is already attached to a RecyclerView".

Here's the code :
Main Fragment
Java:
public class FragMainPage extends Fragment {

    TitlePageIndicator tabs;
    ViewPager pager;
    MainFragmentAdapter adapternya;
    ProgressDialog progdialog;
    View v;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.frag_main_page, container, false);
        return v;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
                .getDisplayMetrics());


        List<BaseFragmentMainPage> mList = new ArrayList<BaseFragmentMainPage>();
        mList.add(new MyHistory());
        mList.add(new TimeLine());
        mList.add(new Group());

        tabs = (TitlePageIndicator)getActivity().findViewById(R.id.main_tabs);
        pager = (ViewPager) getActivity().findViewById(R.id.main_pager);
        adapternya = new MainFragmentAdapter(getChildFragmentManager(),getActivity(),mList);

        pager.setAdapter(adapternya);
        pager.setPageMargin(pageMargin);
        tabs.setViewPager(pager);
        pager.setCurrentItem(1);

    }

Fragment in ViewPager:
Java:
public class TimeLine extends Fragment {

    private RecyclerView mRecyclerView;
    private TimeLineRecycleAdapter mAdapter;
    private final LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity());

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.frag_time_line, container, false);
        return v;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        List<listTimeLineModel> mList = new ArrayList<listTimeLineModel>();
        mList.add(new listTimeLineModel("ANDI","FRANKLYN","MESSAGE","28 sec","100,000","http://lorempixel.com/output/technics-q-c-480-480-6.jpg" ));
        mList.add(new listTimeLineModel("ANDI","FRANKLYN","MESSAGE","28 sec","100,000","http://lorempixel.com/output/sports-q-c-480-480-8.jpg" ));
        mList.add(new listTimeLineModel("ANDI","FRANKLYN","MESSAGE","28 sec","100,000","http://lorempixel.com/output/sports-q-c-480-480-4.jpg" ));
       
        mRecyclerView = (RecyclerView)v.findViewById(R.id.timeline_recycle_list);
        mLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        mLayoutManager.scrollToPosition(0);
        //mRecyclerView.setLayoutManager(null);
        mRecyclerView.setLayoutManager(mLayoutManager);   //this is the problem
        mRecyclerView.setHasFixedSize(true);

        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        mAdapter = new TimeLineRecycleAdapter(mList, R.layout.list_recycle_timeline_item, getActivity());
        mRecyclerView.setAdapter(mAdapter);

    }
}

The Exception message :
Code:
05-05 14:41:10.116  31918-31918/com.sgo.mdevcash E/InputEventSender﹕ Exception dispatching finished signal.
05-05 14:41:10.116  31918-31918/com.sgo.mdevcash E/MessageQueue-JNI﹕ Exception in MessageQueue callback: handleReceiveCallback
05-05 14:41:10.131  31918-31918/com.sgo.mdevcash E/MessageQueue-JNI﹕ java.lang.IllegalArgumentException: LayoutManager android.support.v7.widget.LinearLayoutManager@42c19278 is already attached to a RecyclerView: android.support.v7.widget.RecyclerView{42c26c90 VFED.V.. ......ID 0,0-1080,1551 #7f0b010d app:id/timeline_recycle_list}
            at android.support.v7.widget.RecyclerView.setLayoutManager(RecyclerView.java:804)
            at com.sgo.mdevcash.fragments.TimeLine.onActivityCreated(TimeLine.java:53)
            at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1797)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120)
            at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1929)
            at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1803)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:979)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
            at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:960)
            at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1553)
            at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:506)
            at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:178)
            at com.sgo.mdevcash.activities.MainPage.onBackPressed(MainPage.java:611)
            at android.app.Activity.onKeyUp(Activity.java:2279)
            at android.view.KeyEvent.dispatch(KeyEvent.java:2985)
            at android.app.Activity.dispatchKeyEvent(Activity.java:2513)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:49)
            at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImplBase.java:241)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:49)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2174)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4491)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4458)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4023)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4077)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4046)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4157)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4054)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4214)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4023)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4077)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4046)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4054)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4023)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4077)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4046)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4190)
            at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4350)
            at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2257)
            at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1907)
            at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1898)
            at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2234)
            at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.

Does anyone know how to solve this ?
Sorry for my English, it is not my native

Thank you
 
I already got the solution,

I changed my LinearLayoutManager in fragment 'TimeLine' from global to local then i create new LinearLayoutManager and encapsulate it (setter & getter).

But Now i have another problem. Same as before, after i popbackstack, my adapter in fragment 'TimeLine' become Null.

Please help
Thank you
 
Upvote 0

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones