Tengo un problema al hacer referencia a mis Fragmentos dentro de un ViewPager. Me gustaría hacerlo porque de mi actividad me gustaría actualizar un fragmento en una posición específica (por ejemplo, fragmento visualizado actualmente).Fragmentos de referencia dentro de ViewPager
Actualmente tengo algo como esto:
public static class MyPagerAdapter extends FragmentPagerAdapter {
private static final String TAG = "MyPagerAdapter";
private static HashMap<Integer, EventListFragment> mPageReferenceMap = new HashMap<Integer, EventListFragment>();
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
Log.i(TAG, "getItem: "+position);
int dateOffset = position-1;
EventListFragment mFragment = EventListFragment.newInstance(dateOffset);
mPageReferenceMap.put(position, mFragment);
return mFragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.i(TAG, "destroyItem: "+position);
mPageReferenceMap.remove(position);
super.destroyItem(container, position, object);
}
public EventListFragment getFragment(int key) {
Log.i(TAG, "Size of pager references: "+mPageReferenceMap.size());
return mPageReferenceMap.get(key);
}
}
El problema es que el destroyItem()
es llamado más a menudo que getItem()
, así que me quedo con referencias nulas. Si no uso destroyItem()
para borrar las referencias a los fragmentos destruidos ... bueno, haré referencia a los fragmentos que no existen.
¿Hay alguna buena manera de referenciar los fragmentos que se crean con EventListFragment mFragment = EventListFragment.newInstance(dateOffset);
? ¿O qué debería hacer para actualizar un fragmento dentro de una ViewPager de mi actividad (desde el menú de opciones para ser preciso)?
Acabo de terminar mi final y decidí volver y ver si conseguía que las cosas funcionaran ... me alegro de poder ayudar (incluso si no fue con el problema principal: P). –
Pregunta: ¿no debería pasar la llamada fragList.remove() a la referencia débil, en lugar del fragmento? – gcl1
@Michael: Empecé a usar un enfoque como este, y funciona bastante bien. Pero dado que fragList contiene referencias débiles, parece que las entradas están sujetas a la recolección de elementos no utilizados, aunque aún pueda necesitarlos. He visto que el método getFragmentByPosition() a veces devuelve nulo, así que creo que eso es lo que está sucediendo. ¿Alguna idea de cómo evitar eso? Gracias. – gcl1