FragmentManager ya está ejecutando transacciones después de usar el método setOffscreenPageLimit ()

Tengo un cajón de navegación con un número de fragmentos y uno de ellos es un tablayout con dos fragmentos de reciclerview, los elementos de RecyclerView desaparecen después de cambiar entre fragmentos de cajón de navegación, encontré una solución que necesito usar el método setOffscreenPageLimit () con ViewPager pero Me da el error que se menciona en el título de la pregunta

Aqui esta mi logcat

java.lang.IllegalStateException: FragmentManager is already executing transactions at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1626) at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) at android.support.v4.view.ViewPager.populate(ViewPager.java:1240) at android.support.v4.view.ViewPager.populate(ViewPager.java:1088) at android.support.v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:852) at com.amir.ahmed.EELUStudentUnion.SelectionFragment.setupViewPager(SelectionFragment.java:59) at com.amir.ahmed.EELUStudentUnion.SelectionFragment.onActivityCreated(SelectionFragment.java:40) at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:2089) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1133) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Que es el código del fragmento de disposición de tabulación

 @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager); setupViewPager(viewPager); viewPager.setOffscreenPageLimit(2); tabLayout = (TabLayout) getActivity().findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); setupTabIcons(); } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager()); adapter.addFrag(new Courses(), "IT"); adapter.addFrag(new CoursesBussiness(), "Business"); viewPager.setAdapter(adapter); } 

Me encontré con el problema similar como usted, después de varias horas de investigación, encontré el problema. Si su ViewPager se crea dentro del fragmento, debe utilizar getChildFragmentManager () para FragmentPagerAdapter, en lugar de getFragmentManager ().

Así que su método setupViewPager () debería tener este aspecto.

 private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); adapter.addFrag(new Courses(), "IT"); adapter.addFrag(new CoursesBussiness(), "Business"); viewPager.setAdapter(adapter); } 

La causa raíz del problema es que incrustaste Fragmentos dentro del Fragmento, por eso lanzará la excepción.

 java.lang.IllegalStateException: FragmentManager is already executing transactions 

De acuerdo con los documentos de Google:

Ahora puede incrustar fragmentos dentro de fragmentos. Esto es útil para una variedad de situaciones en las que se desea ubicar componentes de interfaz de usuario dinámicos y reutilizables en un componente de interfaz de usuario que sea dinámico y reutilizable. Por ejemplo, si utiliza ViewPager para crear fragmentos que pasan a la izquierda y la derecha y consumen la mayoría del espacio de la pantalla, ahora puede insertar fragmentos en cada página de fragmentos. Para anidar un fragmento, simplemente llame a getChildFragmentManager () en el fragmento en el que desea agregar un fragmento. Esto devuelve un FragmentManager que puede utilizar como lo hace normalmente desde la actividad de nivel superior para crear transacciones de fragmentos.

  • Puedo usar el paginador de vista con vistas (no con fragmentos)
  • Ocultar pestañas viewPager dinámicamente
  • ViewPager parece reenable clipChildren al desplazarse si se configura PageTransformer
  • Ocultar barra Tablayout en android
  • Fragmento de actualización de Android ViewPager
  • Margen de ViewPager en transformaciones de PageTransformer
  • HorizontalScrollView o Carrousel?
  • Onclick en paginador de vista en android no funciona en mi código
  • ¿Cómo mostrar sólo imágenes de memoria caché en ViewPager con Universal Image Loader Android?
  • Pestañas de ActionBar con ViewPager y diseño del marco
  • ViewPager establece la página actual por programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.