2013-12-11 126 views
0

我想從我的ViewPager適配器中替換碎片,但它似乎不工作。沒有錯誤顯示。當我調用replace(int,Fragment)方法時,它什麼也不做。你有什麼線索爲什麼它沒有工作?替換ViewPager碎片

public class PagerAdapter extends FragmentPagerAdapter { 
    private Vector<Fragment> mFragments; 
    private Stack<Fragment> mHiddenFragments; 
    public PagerAdapter(FragmentManager fm) { 
     super(fm); 
     mFragments = new Vector<Fragment>(); 
     mHiddenFragments = new Stack<Fragment>(); 
    } 
// here is the replacement method I'm using 
    public void replace(int index, Fragment fragment) { 
     mHiddenFragments.push(mFragments.get(index)); 
     mFragments.set(index, fragment); 
     notifyDataSetChanged(); 
    } 
    public void replace(int index) { 
     mFragments.set(index, mHiddenFragments.pop()); 
     notifyDataSetChanged(); 
    } 
    public void add(Fragment fragment) { 
     mFragments.add(fragment); 
     notifyDataSetChanged(); 
    public void remove(int index) { 
     mFragments.remove(index); 
     notifyDataSetChanged(); 
    } 
} 

編輯: 的,我不能去工作部分是片段的去除。看來我只能刪除ViewPager中當前查看的片段。

例如:假設我有片段0 & 1 => mFragments.size()== 2

mPagerAdapter.add(new GenreListFragment()); 
mPagerAdapter.remove(1); 

回答

1

我的是使用嵌套片段「原因喜愛的解決方案,使我他們的完全控制。

你也可以查看此Replace Fragment inside a ViewPager

編輯。 您還可以在獲取notifyDataSetChanged()調用時實現PagerAdapter的抽象方法。

@Override 
public int getItemPosition(Object object) { 
return POSITION_NONE; 
} 

問候。

+0

我想這不是很合適,假設我需要替換更多的碎片,我需要更一般的東西。 – mewa

+0

但是,如果您希望每個頁面有多個片段,則可以在尋呼機適配器中創建一個「空」容器片段,然後將這些孩子添加到這些「基本」片段。 –

+0

但是,我已經成功地爲每個頁面添加了幾個片段,但這不是我尋求的解決方案。 – mewa

1

好吧,我終於知道如何解決它。我改變了我的PagerAdapter擴展FragmentStatePagerAdapter而不是FragmentPagerAdapter,只有當我覆蓋getItemPosition開始正常工作,我的碎片被正確地更換。

@Override 
    public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

而且我發現,FragmentStatePagerAdapter顯然將是我的情況太(許多動態創建的片段)更好。