FragmentPagerAdapter getItem no está siendo activado

Actualmente, con una FragmentActivity , alterno entre 2 tipos de Fragmentos usando el siguiente código.

 private void toggle() { Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.content); Fragment fragment = null; if (oldFragment instanceof ColorFragment) { fragment = new ViewPagerFragment(); } else { fragment = new ColorFragment(android.R.color.black); } getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commitAllowingStateLoss(); } 

2 Se están alternando fragmentos.

  • ColorFragment – Un fragmento simple que llena su fondo con el color negro sólido.
  • ViewPagerFragment – Un fragmento contiene ViewPager . El usuario puede desplazarse entre un fragmento de color morado y un fragmento de color azul.

El código que se encarga de pasar los fragmentos de color púrpura y azul es el siguiente.

 private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return 2; } @Override public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } 

Sin embargo, encuentro el comportamiento extraño durante la conmutación.

  1. Se muestra un fragmento de color negro.
  2. Conmutación.
  3. Ver paginador, que puede deslizar entre los fragmentos púrpura y azul que se muestra.
  4. Conmutación.
  5. Se muestra un fragmento de color negro.
  6. Conmutación.
  7. Nada se muestra, ya que MyFragmentPagerAdapter 's getItem no se está disparando.

Creo que mi situación es similar a FragmentPagerAdapter getItem no se llama

Sin embargo, prefiero no utilizar FragmentStatePagerAdapter , debido al costo de potencialmente más sobrecarga al cambiar entre páginas.

¿Alguna solución para superar este problema?

Incluyo un código fuente completo para demostrar este problema: https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip

5 Solutions collect form web for “FragmentPagerAdapter getItem no está siendo activado”

¿Alguna solución para superar este problema?

He descargado tu código y el problema aparece porque no manejas esos Fragments correctamente. Más precisamente se utilizan Fragments anidados en el ViewPager basado en ViewPager y para que ViewPager se crea el adaptador de esta manera:

 MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getFragmentManager()); 

En su lugar, debe utilizar getChildFragmentManager() para enlazar los fragmentos anidados:

 MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getChildFragmentManager()); 

Además, no debe pasar datos a través de un constructor a un Fragment ya que los datos no sobrevivirán a un cambio de configuración y las cosas malas empezarán a aparecer. Utilice un Bundle lugar.

Solución probada de trabajo global.

getSupportFragmentManager() mantiene la referencia nula algunas veces y View pager no crea una nueva instancia de fragmento. Dado que encuentra referencia al mismo fragmento. Así que para llegar a este uso getChildFragmentManager() resuelve el problema de manera sencilla.

No

new PagerAdapter(getSupportFragmentManager(), fragments);

Hacer

new PagerAdapter(getChildFragmentManager() , fragments);

En mi caso, estaba llamando correctamente

 MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getChildFragmentManager()); 

Pero luego en el fragmento anidado estaba tratando de reemplazar el fragmento de contenedor por otro usando:

 getFragmentManager() 

Tienes que ir a la actividad y llamar

 getActivity().getSupportFragmentManager(); 

En mis casos funcionó después de añadir esto a mi FragmentPagerAdapter :

  @Override public int getItemPosition(Object object) { return POSITION_NONE; } 

Y también usé getChildFragmentManager () como Luksprog dijo

Uso simple FragmentStatePagerAdapter lugar de FragmentPagerAdapter

o

Puede utilizar new MyFragmentPagerAdapter(this.getChildFragmentManager())

Espero que te ayude 🙂

  • ViewPager con FragmentPagerAdapter no se muestra
  • Quitar la página de fragmentos de ViewPager en Android
  • Cómo hacer la transición de viewpager rápido con fragmento?
  • Android.support.v4.app.FragmentPagerAdapter no se puede aplicar a android.app.FragmentManager
  • Intentar invocar método virtual 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()' en una referencia de objeto nulo
  • Tengo un error extraño al usar un ViewPager dentro de un Fragmento
  • ViewPager con fragmentos anidados?
  • Eliminar Elemento + Desplazarse a Siguiente en Android ViewPager
  • Fragmento en ViewPager devuelve objeto vacío onResume
  • No se puede cambiar la etiqueta del fragmento
  • Reordenar páginas en FragmentStatePagerAdapter usando getItemPosition (objeto objeto)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.