我在Android中使用v4兼容性ViewPager。我的FragmentActivity有很多数据,这些数据将以不同的方式显示在ViewPager的不同页面上。到目前为止,我只有3个相同ListFragment的实例,但是将来我将拥有3个不同ListFragments的实例。ViewPager在垂直手机屏幕上,列表不是并排的。
现在,ListFragment上的按钮将启动一个单独的全页活动(通过FragmentActivity),该活动将返回并FragmentActivity修改数据,保存数据,然后尝试更新其ViewPager中的所有视图。在这里,我被困住了。
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;
        }
   ...
现在您可以看到,我的第一个尝试是在整个FragmentPagerAdapter上通知notifyDataSetChanged,这有时显示会更新数据,但其他人遇到了IllegalStateException:在onSaveInstanceState之后无法执行此操作。
我的第二次尝试涉及尝试在ListFragment中调用更新函数,但是getItem中的getId返回0。
使用findFragmentById()或findFragmentByTag()从FragmentManager获取对Fragment的引用
但我不知道片段的标签或ID!我在ViewFragmentr中有一个android:id =“ @ + id / viewpager”,在ListFragment布局中有一个android:id =“ @ android:id / list”用于我的ListView,但是我认为这些没有用。
因此,我该怎么做:a)一次安全地更新整个ViewPager(最好将用户返回到他之前所在的页面)-用户可以看到视图更改是可以的。或者最好b)在每个受影响的ListFragment中调用一个函数以手动更新ListView。
任何帮助将不胜感激!
null碎片。