with viewpager studio practice fragments example best android android-fragments android-viewpager

android - viewpager - ¿Cómo le digo a mi FragmentPagerAdapter personalizado que deje de destruir mis fragmentos?



slide android studio (2)

Tengo un ViewPager con un FragmentPagerAdapter, y mi aplicación ha usado anteriormente solo dos fragmentos (diferentes tipos) sin problemas.

Sin embargo, acabo de agregar un tercer fragmento y ahora mi adaptador / viewpager parece estar destruyendo mis fragmentos cuando me alejo de ellos. Por ejemplo, si estoy en la página 1, la página 3 se destruye y se vuelve a crear cuando me acerco a ella. Si estoy en la página 3, lo mismo sucede con la página 1.

Esto está causando muchos problemas en mi aplicación. Los fragmentos no tienen mucha RAM, así que, ¿cómo puedo evitar que esto suceda?


Creo que estás buscando ViewPager.setOffscreenPageLimit() .

En su caso, lo siguiente debe guardar sus fragmentos en la memoria y no destruirlos.

ViewPager pager = (ViewPager) findViewById(R.id.viewPager); pager.setOffscreenPageLimit(2);

Sin embargo, sospecho que no estás almacenando correctamente el estado de tu vista cuando te destruyen. Tus fragmentos deben manejar correctamente el ser destruido / recreado. Sus fragmentos, por ejemplo, también serían destruidos y recreados si ocurre un cambio de orientación. También podría suceder si el usuario deja su aplicación y el sistema más tarde necesita memoria y destruye su Actividad. Debe poder reabrirse y estar en el mismo estado que antes. Si este es tu problema, considera guardar el estado en onSaveInstanceState() . El estado guardado se le presentará en onCreate donde puede inicializar el estado del fragmento para que sea el mismo que el destruido.


simplemente anula este método en FragmentpagerAdapter

@Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub super.destroyItem(ViewGroup container, int position, Object object); }

eliminar super.destroyItem(ViewGroup container, int position, Object object);

de tu código