2012-07-02 10 views
23

Me gustaría almacenar en caché una vista de fragmento. Mi actividad tiene pestañas deslizables y cada pestaña llama a un fragmento diferente. Pero cuando deslizo entre las pestañas, la transición parece bastante lenta debido a la destrucción de la vista de fragmento, que se reconstruye durante la operación de deslizamiento. ¿Alguien sabe cómo puedo almacenar en caché la vista de cada fragmento para evitar este problema? Trabajo con el soporte de biblioteca v4 y api 14Cómo almacenar en caché una vista de fragmento

Intenté implementar un constructor para los fragmentos, llamado por el contenedor de actividad de los fragmentos: llamo al constructor, los fragmentos se crean como variable de la clase de actividad y luego , cada vez que un fragmento tiene que mostrarse, la clase de actividad devuelve el objeto fragmento que creé antes, pero esto no mejora mucho mi aplicación porque la vista del fragmento se destruye de todos modos

+0

¿Has probado el almacenamiento en caché de la vista en el fragmento mismo y en el onCreateView devuelve el fragmento en caché? ¿O la vista siempre se destruye? – ffleandro

+0

¿Utiliza 'ViewPager' para sus" pestañas deslizables "? – Evos

+0

utilizo pestañas deslizables – Release

Respuesta

23

Esto es porque internamente, de forma predeterminada, el buscapersonas carga un máximo de 3 páginas (fragmentos) en el momento: el que muestra, anterior y siguiente, así que si tiene 5 fragmentos, esto sucederá mientras se mueve del primero al último: (donde x es un fragmento cargado t)

xx000 -> xxx00 -> 0xxx0 -> 00xxx -> 000XX

Trate de usar

myPager.setOffscreenPageLimit(ITEMS_COUNT-1); 

Esto indicará al localizador para mantener todos ellos en memoria y no destruir/crear con cada pasada (mire de cerca la administración de la memoria)

+1

¿No se llamará 'onCreateView' a un fragmento de pestaña? (donde se carga la vista de diseño de fragmento) – StarDust

+1

@StarDust sí, esto llamará aCreateView para todos los fragmentos al mismo tiempo al principio. Es complicado, puede quedarse sin memoria o simplemente obtendrá una pantalla negra o bloque porque del proceso de carga de fragmentos. Esta solución es buena si tiene que cargar 4 o 5 fragmentos de luz, pero yo no lo haría para 10 fragmentos de carga pesada. Puede establecer el offscreenPageLimit en cualquier número inferior al recuento de fragmentos, por ejemplo, si tiene 10 páginas y establece el límite en 4 y se encuentra en la 6ª pantalla, cargará 2 extra en ambas direcciones, como este 000xx ** x * * xx00 (la mejor solución, creo) – MariusBudin

Cuestiones relacionadas