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 🙂

  • Implementar la función como la aplicación de iOS que cierra vertical Desplazar-para-Descartar con ViewPager
  • ViewPager dentro de fragmento, cómo conservar el estado?
  • Añadir pestañas a la izquierda con FragmentPagerAdapter
  • Cómo obtener fragmentos existentes cuando se utiliza FragmentPagerAdapter
  • FragmentPagerAdapter y FragmentStatePagerAdapter
  • GetItem (int) para devolver Listfragment en FragmentPagerAdapter
  • Android FragmentStatePagerAdapter
  • No se puede cambiar la etiqueta del fragmento
  • Java.lang.InstantiationException: no se puede instanciar clase ... sin constructor vacío
  • Implementación de MVP con Dagger en un FragmentPagerAdapter
  • Cambiar las pestañas que no funcionan al hacer clic en las pestañas con PagerSlidingTabStrips
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.