mantener instancias de fragmentos dentro de FragmentPagerAdapter
¿Es OK para mantener una instancia de cada fragmento que se crea para un FragmentPagerAdapter
dentro de FragmentPagerAdapter
?
Algo como esto:
- ¿Cómo pasar argumentos de fragmentos mientras se utiliza un paginador de vista con diferentes fragmentos / layouts?
- FragmentPagerAdapter getItem no está siendo activado
- Vinculación y desvinculación de Android Service a / de Fragment (en ViewPager)
- Android: reutilizar fragmentos de ViewPager y FragmentPagerAdapter
- GetItem (int) para devolver Listfragment en FragmentPagerAdapter
@Override public Object instantiateItem(ViewGroup container, int position) switch(position){ case 0: fragment0 = super.instantiateItem(container, position); return fragment0; case 1: fragment1 = super.instantiateItem(container, position); return fragment1; default: return super.instantiateItem(container, position); } }
¿Me enfrentaré a problemas de memoria?
La idea es hacer algo como MyFragmentPagerAdapter.fragment0
para obtener una referencia al fragmento.
- ¿Cómo puedo pasar una variable a través de FragmentPagerAdapter a un fragmento?
- Implementación de MVP con Dagger en un FragmentPagerAdapter
- Manejo del cambio de orientación con ViewPager + FragmentPagerAdapter
- Cómo hacer que PagerAdapter cargue todas las páginas
- Fragmento no añadido (fallo inconsistente)
- FragmentPagerAdapter sólo existe en Android.Support.V4.App (y no en Android.App)
- IllegalStateException con PagerAdapter
- Cómo quitar el fragmento de FragmentPagerAdapter?
El problema con ese enfoque es que el FragmentManager
puede crear nuevas instancias de un fragmento incluso si mantiene una referencia. En esa situación, varias instancias del mismo fragmento estarían en la memoria (leak) y la referencia que mantenga apunta a una instancia que ni siquiera podría mostrarse. En otras palabras, no es seguro.
Lo que es seguro sin embargo es mantener una referencia de su actividad en sus fragmentos.
En tu fragmento anulas
@Override public void onAttach(Activity activity) { super.onAttach(activity); home = (YourFragmentActivity) activity; } public void onCreate(Bundle savedInstanceState) { home.setThisFragTag(getTag()); }
En tu FragmentActivity
public void ThisFragTag(String tag) { this.fragTag = tag; }
Ahora en su actividad puede obtener una retención para la instancia de fragmento que se muestra actualmente con
(YourFragmentClass) getSupportFragmentManager().findFragmentByTag(fragTag);
Puede repetir esta operación para varios fragmentos
- Código de error SQLite de Android 21
- Integración de los servicios REST con una base de datos de inventario y SQL utilizando Android