Android FragmentPager不更新视图

Android FragmentPager不更新视图,android,android-fragments,Android,Android Fragments,我试着按照其他答案的建议去做,但是当我查看日志时,在getItemPosition返回POSITION_NONE后,位置0不会被调用为getItem,知道吗?我还尝试在返回getItemPosition时重写DestryItem,它确实会被调用,但什么也没有发生 公共类提供程序ActivityPagerAdapter扩展了FragmentPagerAdapter{ private ArrayList<String> fragments; public ProvidersActivi

我试着按照其他答案的建议去做,但是当我查看日志时,在getItemPosition返回POSITION_NONE后,位置0不会被调用为getItem,知道吗?我还尝试在返回getItemPosition时重写DestryItem,它确实会被调用,但什么也没有发生

公共类提供程序ActivityPagerAdapter扩展了FragmentPagerAdapter{

private ArrayList<String> fragments;

public ProvidersActivityPagerAdapter(FragmentManager fm) {
  super(fm);
  fragments=new ArrayList<String>();
  if(provider.isInitialized()){
    fragments.add(BaseDetailsFragment.class.getName());
  }else{
    fragments.add(BaseAuthFragment.class.getName());
  }
  this.fm=fm;
}

@Override
public int getCount(){
  return fragments.size();
}


@Override 
public int getItemPosition(Object object) {
  AppUtils.logI("Get Item Position: "+POSITION_NONE+" "+object.getClass().getName());
  return POSITION_NONE;
}

@Override
public Fragment getItem(int position) {
  AppUtils.logI("Get Fragment for: "+position);
  String f=fragments.get(position);
  if(f.equals(BaseDetailsFragment.class.getName())){
    return provider.getDetailFragment();
  }
  if(f.equals(BaseAuthFragment.class.getName())){
    return provider.getAuthFragment();
  }
  if(f.equals(BaseSelectorFragment.class.getName())){
    return provider.getCurrentSelector();
  }
  return new Fragment();
}

private void addItem(int loc,String fa,String tag){
  this.fragments.add(loc,fa);
  AppUtils.logI(fragments.toString());
  notifyDataSetChanged(); //only creates the new fragment but not updating the old ones. 
  mViewPager.setCurrentItem(loc);
}
私有数组列表片段;
公共提供程序活动管理器适配器(FragmentManager fm){
超级(fm);
片段=新的ArrayList();
if(provider.isInitialized()){
add(BaseDetailsFragment.class.getName());
}否则{
add(BaseAuthFragment.class.getName());
}
这个.fm=fm;
}
@凌驾
public int getCount(){
返回fragments.size();
}
@凌驾
public int getItemPosition(对象){
logI(“获取项目位置:+Position\u NONE+”“+object.getClass().getName());
返回位置\无;
}
@凌驾
公共片段getItem(int位置){
logI(“获取:“+位置”的片段);
字符串f=fragments.get(位置);
if(f.equals(BaseDetailsFragment.class.getName()){
返回provider.getDetailFragment();
}
if(f.equals(BaseAuthFragment.class.getName()){
返回provider.getAuthFragment();
}
if(f.equals(BaseSelectorFragment.class.getName()){
返回provider.getCurrentSelector();
}
返回新片段();
}
专用void附加项(int-loc、String-fa、String-tag){
本.片段.添加(loc,fa);
AppUtils.logI(fragments.toString());
notifyDataSetChanged();//只创建新片段,不更新旧片段。
mViewPager.setCurrentItem(loc);
}

FragmentPagerAdapter的支持库版本似乎在销毁项中没有任何作用。因此,解决方案是在构建页面适配器时保存片段管理器并重写destoryItem()函数。请注意,这可能与支持库的未来版本不兼容

@Override
public void destroyItem(ViewGroup container,int position,Object object){
  super.destroyItem(container, position, object);
  FragmentTransaction bt = fm.beginTransaction();
  bt.remove((Fragment)object);
  bt.commit();
}

这只是没有记录在案吗?我已经尝试解决这个问题有一段时间了,只是碰巧在2012年发现了这个答案。我认为这不可能在2015年仍然是我的问题,但果不其然,它起了作用。这是如何解决的?