versiones sandwich nougat lollipop jelly honeycomb froyo descargar cream caracteristicas bean android android-3.0-honeycomb

android - sandwich - ViewPager: entrada recursiva para ejecutarPendingTransactions



ice cream sandwich (3)

Tengo un ViewPager dentro de ViewPager y recibo esta excepción

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)

No estoy seguro de dónde proviene este error y no sé demasiado sobre FragmentManager. ¿Debo limpiar las transacciones o algo así? ¿O es una viewPager dentro de una ViewPager imposible? Y sí, sé que hay otras formas de hacerlo, pero quiero que la snappness y el desplazamiento sean gratuitos. También me gustaría entender cómo funciona realmente.


Consulte esto. Mostrar fragmento viewpager dentro de un fragmento

Se puede hacer, pero se debe hacer a través de Asysnc, ya que debes permitir que la transacción de los primeros fragmentos se complete primero. Puedes tener fragmentos dentro de fragmentos. Lo sé porque tengo varios proyectos haciéndolo.


La nueva versión de Support Library v4 (o Android 4.2, por supuesto) resuelve este problema de forma sencilla. Para hacer esto, simplemente haga el constructor de su FragmentPagerAdapter personalizado de la siguiente manera:

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

Este trabajo porque la nueva versión de Android aprueba el uso de fragmentos anidados


Recientemente me encontré con el mismo problema y después de una pequeña investigación, me sorprendí al descubrir que simplemente no puedes insertar un fragmento en otro. Aquí está ejecutando una transacción de fragmento en otra. Simplemente no está permitido.

La nueva versión de Support Library v4 (o Android 4.2, por supuesto) resuelve este problema. Vea la respuesta a continuación.

Actualice getChildFragmentManager () para abordar el problema mencionado anteriormente.