2012-08-06 77 views
3

我试图做其他答案的建议,但是当我查看日志时,getItemPosition返回POSITION_NONE之后,位置0不会被调用getItem,任何想法?当getItemPosition被返回时,我也尝试覆盖destoryItem,它会被调用但没有任何反应。FragmentPager没有更新视图

公共类ProvidersActivityPagerAdapter扩展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); 
} 

回答

7

看来,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(); 
} 
+0

这只是没有记录在任何地方?我一直试图解决这个问题一段时间,只是偶然发现了2012年发布的这个答案。我认为这不可能仍然是我在2015年的问题,但肯定的是,它的工作。这没有得到解决? – NoChinDeluxe 2015-11-03 22:00:46