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 …
- Segundo conjunto de pestañas en un fragmento de Android
- "El niño especificado ya tiene un padre" error usando FragmentStatePagerAdapater
- Android - fragmento de niño no carga la segunda vez dentro de FragmentStatePagerAdapter
- FragmentStatePagerAdapter no llamando a getItem
- La aplicación se bloquea al asignar un nuevo adaptador a mi ViewPager
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
- Fragmento en ViewPager en Fragmento no se vuelve a cargar en el cambio de orientación
- Quitar todos los fragmentos de ViewPager poblados por FragmentStatePagerAdapter
- Cargar sólo un fragmento en ViewPager
- Desplazamiento Dirección en ViewPager
- Refrescar vista de fragmentos mientras utiliza FragmentStatePagerAdapter
- FragmentStatePagerAdapter OutOfMemoryError
- Ver Pager Crash Null Pointer Excepción debido a navegar de nuevo al fragmento antiguo - Android
- Android: ViewPager FragmentStatePagerAdapter obtener la vista actual
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; } }