Android FragmentStatePagerAdapter devuelve pantalla en blanco al recargar fragmentos de medio

Estoy tratando de hacer una aplicación con 4 pestañas utilizando FragmentStatePagerAdapter y ViewPager.

Cuando ejecuto por primera vez la aplicación y si selecciono las pestañas en orden (0 a 3) todo va bien, entonces si intento realizar el camino de regreso (3 a 0) la pestaña 1 muestra una pantalla en blanco, si, después de eso, Seleccione la pestaña 2 y, a continuación, está en blanco también, si voy a la pestaña 0 y hacer de nuevo la pestaña 2 de nuevo a la vida y algunas veces ficha 1 volver a vivir, pero no he encontrado ninguna secuencia …

Sé que es un desastre … La cosa es uso de la pestaña 1 para fallar, la pestaña 2 falla algunas veces y las pestañas 0 y 3 funcionan bien siempre. Si cambio la posición de los fragmentos todo es lo mismo, algunos pienso que no está relacionado con el código de fragmentos …

No hay errores mostrados en el logcat, la depuración de los fragmentos muestra que todo va en la forma en que debería ser …

He estado algunos días tratando de arreglarlo sin suerte (obviusly …), he intentado anular getItemPosition () para volver POSITION_NONE, he intentado hacer mi propio FragmentStatePagerAdapter como aquí decir http: // speakman .net.nz / blog / 2014/02/20 / a-bug-en-y-un-arreglo-para-el-camino-fragmentstatepageradapter-handles-fragment-restoration / but nothing … Y algo más que haven Trabajó para mí.

Algunos códigos: Main Class

public class Main extends FragmentActivity implements ActionBar.TabListener { private MyPageAdapter mPagerAdapter; private ViewPager mPager; @Override protected void onCreate(Bundle si) { super.onCreate(si); setContentView(R.layout.activity_main); init(); } private void init() { final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); if (mPagerAdapter == null) { mPagerAdapter = new PaginaAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mPagerAdapter); mPager.requestTransparentRegion(mPager); mPager.setOnPageChangeListener(new viewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { actionBar.setSelectedNavigationItem(position); } }); // Tab creation for (int i = 0; i < mPagerAdapter.getCount(); i++) { View tabView = getLayoutInflater().inflate(R.layout.tab, null); ((ImageView) tabView.findViewById(R.id.tabIcon)) .setImageDrawable(getResources().getDrawable(mPagerAdapter.getIcon(i))); actionBar.addTab(actionBar.newTab().setCustomView(tabView).setTabListener(this)); } } } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { mPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } 

Adaptador

 public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Override public int getCount() { return 4; } .... } 

Gracias.

ACTUALIZACIÓN: Mis fragmentos están en clases separadas y no son estáticos, ¿es importante? Otra cosa que acabo de dar cuenta es que parece estar destruyendo el fragmento después de tocar la pestaña porque si deslizo lentamente puedo ver el fragmento pero de repente todo desaparece

Sugiero que utilice FragmentPagerAdapter lugar de FragmentStatePagerAdapter . Parece que sólo quieres tener 3 Tabs y un Fragment para cada uno, que no suena demasiado memoria (siempre y cuando no estén llenos de Bitmaps de Bitmaps , etc). Cuando se utiliza FragmentStatePagerAdapter usted es responsable de restaurar el estado de cada Fragment cuando se vuelve a cargar, con FragmentPagerAdapter el sistema persiste la jerarquía View , que es lo que desea.

Pruebe este uso FragmentPagerAdapter

 MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Override public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Override public int getCount() { // get item count - equal to number of tabs return 4; } } 
  • FragmentStatePageAdapter: Múltiples elementos visibles al mismo tiempo - ¿Cómo centrar una página específica?
  • FragmentPagerAdapter y FragmentStatePagerAdapter
  • No se puede crear una instancia del tipo PagerAdapter
  • FragmentStatePagerAdapter fuga de memoria (fragmentos anidados con viewpager)
  • El fragmento ya no existe para la clave f0: index 1
  • ViewPager + FragmentStatePageAdapter: ¿qué significa esta advertencia "no actualizada en línea"?
  • Después de la rotación, la transacción de fragmentos da IllegalStateException
  • ViewPager primer fragmento mostrado siempre es incorrecto con FragmentStatePager
  • ¿Cómo evitar recrear Fragment en ViewPager?
  • ListFragment no vuelve a mostrar datos al llamar desde FragmentStatePagerAdapter
  • GetResources de FragmentStatePagerAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.