title: Update data in ListFragment as part of ViewPager
body: <p>I'm using the v4 compatibility ViewPager in Android.  My FragmentActivity has a bunch of data which is to be displayed in different ways on different pages in my ViewPager.  So far I just have 3 instances of the same ListFragment, but in the future I will have 3 instances of different ListFragments.  The ViewPager is on a vertical phone screen, the lists are not side-by-side.</p>
  
  <p>Now a button on the ListFragment starts an separate full-page activity (via the FragmentActivity), which returns and FragmentActivity modifies the data, saves it, then attempts to update all views in its ViewPager.  It is here, where I am stuck.</p>
  
  <pre><code>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;
          }
     ...
  </code></pre>
  
  <p>Now as you can see, my first attempt was to notifyDataSetChanged on the entire FragmentPagerAdapter, and this showed to update the data sometimes, but others I got an IllegalStateException: Can not perform this action after onSaveInstanceState.  </p>
  
  <p>My second attempt involed trying to call an update function in my ListFragment, but getId in getItem returned 0.  As per the docs I tried by </p>
  
  <blockquote>
    <p>acquiring a reference to the Fragment from FragmentManager, using
    findFragmentById() or findFragmentByTag()</p>
  </blockquote>
  
  <p>but I don't know the tag or id of my Fragments! I have an android:id="@+id/viewpager" for ViewPager, and a android:id="@android:id/list" for my ListView in the ListFragment layout, but I don't think these are useful.</p>
  
  <p>So, how can I either:
  a) update the entire ViewPager safely in one go (ideally returning the user to the page he was on before) - it is ok that the user see the view change.
  Or preferably,
  b) call a function in each affected ListFragment to update the ListView manually.</p>
  
  <p>Any help would be gratefully accepted!</p>