Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ViewPager: Recursive entry to executePendingTransactions

I have a ViewPager within a ViewPager and I am getting this exception

09-07 18:30:26.392: ERROR/AndroidRuntime(841): FATAL EXCEPTION: main     java.lang.IllegalStateException: Recursive entry to executePendingTransactions     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1331)     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:422)     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:86)     at android.support.v4.view.ViewPager.populate(ViewPager.java:453)     at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563)     at android.view.View.dispatchAttachedToWindow(View.java:7974)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1857)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)     at android.view.ViewGroup.addViewInner(ViewGroup.java:2968)     at android.view.ViewGroup.addView(ViewGroup.java:2824)     at android.support.v4.view.ViewPager.addView(ViewPager.java:537)     at android.view.ViewGroup.addView(ViewGroup.java:2781)     at android.view.ViewGroup.addView(ViewGroup.java:2761)     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:848)     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1041)     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:616)     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1359)     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:422)     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:86)     at android.support.v4.view.ViewPager.populate(ViewPager.java:453)     at android.support.v4.view.ViewPager.onAttachedToWindow(ViewPager.java:563)     at android.view.View.dispatchAttachedToWindow(View.java:7974)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1857)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)     at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1862)     at android.view.ViewRoot.performTraversals(ViewRoot.java:726)     at android.view.ViewRoot.handleMessage(ViewRoot.java:1944)     at android.os.Handler.dispatchMessage(Handler.java:99)     at android.os.Looper.loop(Looper.java:126)     at android.app.ActivityThread.main(ActivityThread.java:3997)     at java.lang.reflect.Method.invokeNative(Native Method)     at java.lang.reflect.Method.invoke(Method.java:491)     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)     at dalvik.system.NativeStart.main(Native Method) 

I am not really sure where this error comes from and I don't know too much about the FragmentManager. Do I need to flush the transactions or something like that? Or is a viewPager within a ViewPager impossible? And yes I know there are other ways to do this but I want the snappness and the scrolling for free. Also I would like to understand how it actually works.

like image 602
browep Avatar asked Sep 07 '11 18:09

browep


2 Answers

New version of Support Library v4 (or Android 4.2, ofcourse) resolve this problem much simply. For do this, simply do constructor of your custom FragmentPagerAdapter like this:

public CustomFragmentPagerAdapter(android.support.v4.app.Fragment fragment) {     super(fragment.getChildFragmentManager());      // write your code here } 

This work because new Android version approve using nested Fragments

like image 120
senneco Avatar answered Sep 21 '22 23:09

senneco


Recently I encountered the same problem and after a little investigation I was surprised to discover that you simply can't embed one fragment into another. Here you are executing one fragment transaction in another one. It's just not allowed.

New version of Support Library v4 (or Android 4.2, of course) resolves this problem. See the answer below.

Update getChildFragmentManager () added to tackle the above mentioned issue.

like image 24
Dmitry Ryadnenko Avatar answered Sep 23 '22 23:09

Dmitry Ryadnenko