2012-08-06 125 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