Estoy usando la compatibilidad v4 ViewPager en Android. My FragmentActivity tiene una gran cantidad de datos que se mostrarán de diferentes maneras en diferentes páginas en mi ViewPager. Hasta ahora solo tengo 3 instancias del mismo ListFragment, pero en el futuro tendré 3 instancias de ListFragments diferentes. ViewPager está en una pantalla de teléfono vertical, las listas no están una al lado de la otra.
Ahora, un botón en ListFragment inicia una actividad de página completa separada (a través de FragmentActivity), que regresa y FragmentActivity modifica los datos, los guarda y luego intenta actualizar todas las vistas en su ViewPager. Es aquí, donde estoy atrapado.
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public String getTitle(int position){
return titles[position];
}
@Override
public int getCount(){
return titles.length;
}
@Override
public Fragment getItem(int position)
{
Fragment frag = HomeListFragment.newInstance(position);
//Attempt 2:
//fragId[position] = frag.getId();
return frag;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //To make notifyDataSetChanged() do something
}
}
public class HomeListFragment extends ListFragment
{
...
public static HomeListFragment newInstance(int num)
{
HomeListFragment f = new HomeListFragment();
...
return f;
}
...
Ahora, como puede ver, mi primer intento fue notificar aDataSetChanged en todo el FragmentPagerAdapter, y esto demostró actualizar los datos a veces, pero otros obtuve una IllegalStateException: no se puede realizar esta acción después de onSaveInstanceState.
Mi segundo intento invocó el intento de llamar a una función de actualización en mi ListFragment, pero getId en getItem devolvió 0. Según los documentos que probé por
adquirir una referencia al Fragment de FragmentManager, usando findFragmentById () o findFragmentByTag ()
¡pero no sé la etiqueta o la identificación de mis Fragmentos! Tengo un android: id = "@ + id / viewpager" para ViewPager, y un android: id = "@ android: id / list" para mi ListView en el diseño ListFragment, pero no creo que sean útiles.
Entonces, ¿cómo puedo: a) actualizar todo el ViewPager de forma segura de una sola vez (idealmente, devolver al usuario a la página en la que estaba antes): está bien que el usuario vea el cambio de vista. O preferiblemente, b) llame a una función en cada ListFragment afectado para actualizar el ListView manualmente.
Cualquier ayuda sería gratamente aceptada!
null
por fragmento.