J'utilise la compatibilité v4 ViewPager sous Android. Mon FragmentActivity a un tas de données qui doivent être affichées de différentes manières sur différentes pages de mon ViewPager. Jusqu'à présent, je n'ai que 3 instances du même ListFragment, mais à l'avenir j'aurai 3 instances de ListFragments différents. Le ViewPager est sur un écran de téléphone vertical, les listes ne sont pas côte à côte.
Maintenant, un bouton sur le ListFragment démarre une activité pleine page distincte (via FragmentActivity), qui retourne et FragmentActivity modifie les données, les enregistre, puis tente de mettre à jour toutes les vues dans 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 notifierDataSetChanged sur l'ensemble du FragmentPagerAdapter, et cela a montré qu'il fallait parfois mettre à jour les données, mais d'autres j'ai eu une IllegalStateException: impossible d'effectuer cette action après onSaveInstanceState.
Ma deuxième tentative consistait à essayer d'appeler une fonction de mise à jour dans mon ListFragment, mais getId dans getItem a renvoyé 0. Selon les documents que j'ai essayés par
acquérir une référence au Fragment à partir de FragmentManager, en utilisant findFragmentById () ou findFragmentByTag ()
mais je ne connais pas la balise ou l'identifiant de mes fragments! J'ai un android: id = "@ + id / viewpager" pour ViewPager, et un android: id = "@ android: id / list" pour mon ListView dans la mise en page ListFragment, mais je ne pense pas que ceux-ci soient utiles.
Alors, comment puis-je: a) mettre à jour l'intégralité du ViewPager en toute sécurité en une seule fois (idéalement en renvoyant l'utilisateur à la page sur laquelle il se trouvait auparavant) - il est normal que l'utilisateur voit la vue changer. Ou de préférence, b) appelez une fonction dans chaque ListFragment affecté pour mettre à jour le ListView manuellement.
Toute aide serait acceptée avec gratitude!
nullfragment.