Mise à jour des données dans ListFragment dans le cadre de ViewPager

Je suis en utilisant la v4 compatibilité ViewPager dans Android. Mon FragmentActivity a un tas de données qui doivent être affichés de différentes manières sur les différentes pages de mon ViewPager. Jusqu'à présent j'ai juste 3 instances de la même ListFragment, mais dans le futur, je vais avoir 3 instances de différents ListFragments. Le ViewPager est sur une verticale de l'écran du téléphone, les listes ne sont pas côte à côte.

Maintenant un bouton sur le ListFragment commence un distinct en pleine page de l'activité (via le FragmentActivity), qui retourne et FragmentActivity modifie les données, il enregistre, puis tente de mettre à jour toutes les vues de son ViewPager. C'est ici, où je suis coincé.

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;
}
...

Maintenant, comme vous pouvez le voir, ma première tentative a été de notifyDataSetChanged sur l'ensemble de la FragmentPagerAdapter, et cela a montré à mettre à jour les données parfois, mais d'autres, j'ai eu une IllegalStateException: vous ne Pouvez pas effectuer cette action après onSaveInstanceState.

Ma deuxième tentative involed vous essayez d'appeler une fonction de mise à jour dans mon ListFragment, mais getId dans getItem retourné 0. Selon les docs que j'ai essayé par

l'acquisition d'une référence pour le Fragment de la FragmentManager, à l'aide de
findFragmentById() ou findFragmentByTag()

mais je ne sais pas la marque ou de l'id de mes Fragments! J'ai un android:id="@+id/viewpager" pour ViewPager, et un android:id="@android:id/liste" pour ma ListView dans le ListFragment mise en page, mais je ne pense pas qu'ils sont utiles.

Donc, comment je peux soit:
a) mise à jour de l'ensemble de la ViewPager en toute sécurité dans un aller (idéalement retour de l'utilisateur à la page qu'il était avant) - il est ok pour l'utilisateur de voir le changement de vue.
Ou, de préférence,
b) l'appel d'une fonction dans chaque ListFragment pour mettre à jour la liste manuellement.

Toute aide serait très appréciée!

InformationsquelleAutor barkside | 2011-09-11