Arasthel
31/10/12, 22:22:37
Muy buenas, llevo un día entero dándole vueltas al problema, probando numerosas soluciones y hasta ahora no he sacado nada en claro.
En una actividad tengo un ViewPager que contiene un número variable de Fragments del mismo tipo que se crean en tiempo de ejecución y uno de otro tipo. La actividad suele funcionar bien, hasta que el sistema se queda sin memoria y mata a la aplicación. Cuando esto ocurre y vuelvo a iniciar la app volviendo a crear el ViewPager y los fragments, varios de ellos (los instanciados por el ViewPager cuando la app se cerró) me aparecen "desvinculados" de mi actividad (getActivity() = null) siempre y cuando estos no se instanciaran por primera vez en esta ocasión.
Lo pongo más esquemático:
La app se instancia por primera vez, carga algunos fragments del ViewPager
El sistema se queda sin memoria y mata mi app
Abro la app de nuevo y aunque todo se debería de crear de 0, en algunos fragments del ViewPager, "getActivity()" es null. Casualmente, estos fragments son los que se instanciaron la primera vez.
¿Alguien que haya trabajado ya con esto puede decirme qué hacer? Por lo que he leído, podría ser que el SupportFragmentManager guardase en memoria automáticamente mis fragments y luego los cargase, y de ahí que los fragments estén vinculados al Activity antiguo y por ello su getActivity() es null, ¿pero qué solución tiene esto?
Copio mi ViewPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter{
private SparseArray<Fragment> fragments = new SparseArray<Fragment>();
private Context context;
public ViewPagerAdapter(Context context) {
super(((FragmentActivity) context).getSupportFragmentManager());
this.context = context;
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);
}
@Override
public int getCount() {
return fragments.size();
}
public SparseArray<Fragment> getFragments() {
return fragments;
}
public void setFragments(ArrayList<Fragment> fragments) {
for(int i = 0; i < fragments.size(); i++){
this.fragments.put(i, fragments.get(i));
}
notifyDataSetChanged();
}
}
Un saludo y gracias.
En una actividad tengo un ViewPager que contiene un número variable de Fragments del mismo tipo que se crean en tiempo de ejecución y uno de otro tipo. La actividad suele funcionar bien, hasta que el sistema se queda sin memoria y mata a la aplicación. Cuando esto ocurre y vuelvo a iniciar la app volviendo a crear el ViewPager y los fragments, varios de ellos (los instanciados por el ViewPager cuando la app se cerró) me aparecen "desvinculados" de mi actividad (getActivity() = null) siempre y cuando estos no se instanciaran por primera vez en esta ocasión.
Lo pongo más esquemático:
La app se instancia por primera vez, carga algunos fragments del ViewPager
El sistema se queda sin memoria y mata mi app
Abro la app de nuevo y aunque todo se debería de crear de 0, en algunos fragments del ViewPager, "getActivity()" es null. Casualmente, estos fragments son los que se instanciaron la primera vez.
¿Alguien que haya trabajado ya con esto puede decirme qué hacer? Por lo que he leído, podría ser que el SupportFragmentManager guardase en memoria automáticamente mis fragments y luego los cargase, y de ahí que los fragments estén vinculados al Activity antiguo y por ello su getActivity() es null, ¿pero qué solución tiene esto?
Copio mi ViewPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter{
private SparseArray<Fragment> fragments = new SparseArray<Fragment>();
private Context context;
public ViewPagerAdapter(Context context) {
super(((FragmentActivity) context).getSupportFragmentManager());
this.context = context;
}
@Override
public Fragment getItem(int arg0) {
return fragments.get(arg0);
}
@Override
public int getCount() {
return fragments.size();
}
public SparseArray<Fragment> getFragments() {
return fragments;
}
public void setFragments(ArrayList<Fragment> fragments) {
for(int i = 0; i < fragments.size(); i++){
this.fragments.put(i, fragments.get(i));
}
notifyDataSetChanged();
}
}
Un saludo y gracias.